在《零基础学编程021:获取股票实时行情数据》一节中,我们想获取6支股票的行情数据,在《零基础学编程022:函数的世界》里我们能够把重复性的代码封装为一个函数price(),以后获得不同的股票行情只需调用函数即可,回顾一下这个函数的代码:
def price(stockCode) :
url = 'http://hq.sinajs.cn/list=' + stockCode
with req.urlopen(url) as f :
hq = f.read().decode('GBK')
v = hq.split(',')
return v[1]
以后,我们还会写许多函数,比如获取股票的名称、取收盘价,取某日的行情等,当函数写得越来越多时,代码就会变得难以维护,这时需要用一种办法把同类的东西封装在一起,就要用到面向对象编程(OOP: Object Oriented Programming)的概念。
现代化的编程语言几乎都支持面向对象的概念,所以要尽快掌握面向对象编程的思路,程序员的世界里几乎全是对象和函数。
以股票程序为例,GAFATA中的google是股票,amazon是股票,facebook是股票,apple是股票,在计算机的世界里就把这些单一的个体称为对象(object),把这些对象的共性的抽象为类(class),在这个例子里,google、amazon、facebook,apple等都是一个一个的对象,而股票Stock就是类。
先来看股票Stock类的代码:
import urllib.request as req
class Stock :
code = ""
def __init__(self, code1) :
self.code = code1
def getPrice(self) :
url = 'http://hq.sinajs.cn/list=' + self.code
with req.urlopen(url) as f :
hq = f.read().decode('GBK')
v = hq.split(',')
return v[1]
解释一下:
1)class Stock :
这一行语句,表示声明一个类,类的名称是Stock,后面一定要有冒号,以后的代码行要缩进,因为它们要描述类中的成员变量和成员函数。
2)code = ""
股票代码不同,则代表不同的股票对象,这里的code用来表示股票代码,例如:gb_goog,gb_amzn等。这个code称为成员变量。
3)def __init__(self, code1) 函数
这个函数的写法有点特别,称为构造函数,用于完成一些初始化的任务,这里是把一个股票代码记录在self.code中。self是一个python中一个非常重要的关键字,表示对象本身,你要使用类中的变量时,就要用self后面加一个小点。
4)def getPrice(self) 函数
这个函数称为成员函数,这里把以前的price函数修改了一下,主要的变化就在于self.code。
上面的类的定义就完成了,类名叫Stock,有一个成员变量code,有一个成员函数getPrice(),在面向对象的概念里,这些函数也称为方法,英文是function或method。还有一个名称比较奇怪的函数,前后都有两个下划线,表示这个函数一般不给外界使用,只是给系统调用的。
这样就完成了一个股票类的封装,我们使用它时,只需构造一个对象,并调用相应的方法即可。
google = Stock("gb_goog") # 构造一个对象,谷歌股票,系统会自动调用__init__函数
print(google.getPrice()) # 取开盘价
amazon = Stock("gb_amzn") # 构造另一个对象,亚马逊
print(amazon.getPrice()) # 取开盘价
小结:
--- END ---