第五章 模块,类和方法
模块
Python下用模块来组织函数的方式非常简单有效,任何带有Python代码的文件都可以当作同名的模块文件来使用。
使用模块
>>> import random
>>> random.randint(1,6)
2
首先要告诉Python,将要通过import命令来使用random模块。在Python安装时,文件random.py包含了randint函数和其他的一些函数。
但是不同的库当中会有很多重名的函数,为了防止运行出错,我们往往会模块名.函数名,但是这样有时会很麻烦,可以有些小技巧如:
>>> import random as r
>>> r.randint(1,6)
2
这样就给模块取了一个新的名字,不过这个名字只能在这个程序内用。这样就可以用r来代替random了
如果担心随便取新名字会造成程序看起来很混乱,可以采用以下方法
>>> from random import randint
>>> randint(1,6)
4
也可以采用以下方法,*代表所有函数
>>> from random import*
>>> randint(1,6)
2
面向对象
面向对象与模块有很多共同点。他们都是把相关的项进行整合,从而方便管理和寻找。
例如:
'abc'.upper( )
就是在高速字符串’abc‘需要它变成大写。在面向对象里,abc是内建类str的实例,upper是类str的方法。
此外还可以通过代码来获得一个对象的类型
>>> 'abc'.__class__
<class 'str'>
定义类
class ScaleConverter
def _init_(self,units_from,units_to,factor):
self.units_from=units_from
self.units_to=units_to
self.factor=factor
def description(self):
return 'Convert'+self.units_from+'to'+self.units_to
def convert(self,value):
return value*self.factor
c1=ScaleConverter('inches','mm',25)
print('c1.description( ))
print('converting 2 inches')
print(str(c1.convert(2))+c1.units_to)
第一行表示定义这个类的名字为ScaleConverter的类。结尾处的:表示后面的项直到缩进重新回到最左边之前,都是类定义的一部分。
ScaleConverter中有3个函数定义。这些函数都属于类,除非通过类实例化,否则他们是不能用的。这种属于类的函数叫做方法。
当Python给类创建了一个新的实例之后,就被称为_init_方法。_init_所有的参数的数量取决于类实例创建时所提供的参数数量
继承
继承在类里的用法,就是给已存在的类在创建一个版本,而且,继续使用父类里的变量和方法,只是添加或覆盖了几个代码。
class ScaleAndOffsetConberter(ScaleConverter):
def _int_(self,units_from,units_to,factor,offset):
ScaleConberter._init_(self,units_from,units_to,factor) self.offset=offset
def convert(self,value):
return value*self.factor+self.offset
注意ScaleAndOffsetConberter后面紧跟着ScaleConverter,这个就是如何区别类中父类的方法。
对于ScaleConverter的新子类来说,_init_方法首先要请求父类的_init_方法,之后才可以定义新变量offset。
而convert方法将会覆盖父类中的convert方法,因为需要给这种换算器里增加一个offset。