构造函数
构造函数是任何类都有的特殊方法。当要创建一个类时,就要调用构造函数。他的名字是__init__。init的前后分别是两个下划线。时间类Time的构造函数如下:
>>> class Time: ... def __init__(self , hours = 0 , minutes = 0 , seconds = 0): ... self.hours = hours; ... self.mintues = minutes; ... self.seconds = seconds; ... ... def printTime(self): ... print str(self.hours) ... ... ... >>> now = Time(12,12,43) >>> now <__main__.Time instance at 0x1783cf8> >>> now.printTime() 12 >>>
操作符重定义
>>> class RMB: ... def __init__(self,sum = 0.0): ... self.sum = sum; ... ... def __str__(self): ... return str(self.sum); ... ... ... >>> a = RMB() >>> b = RMB() >>> a + b Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'instance' and 'instance' >>
我们定义了一个RMB类,然后生成两个实例,这两个实例相加后,显示了一条错误信息,表示实例不能进行相加操作。错误信息的意思是,加发操作暂时不支持两个实例操作数。
为了使类的实例也可以进行数学操作,我们需要在类的内部重定义新定义的数学操作符,使之支持用户定义的数据类型。很多人会立即意识到这不是C++中的操作符重载吗?在这里我们没有重载这个词。因为C++中的重载比Python中的重定义的概念范围要广的很多,因此,我们使用重定义这个词。下面我们修改这个RMB的类添加__add__ 和__sub__操作
>>> class RMB: ... def __init__(self , sum = 0.0): ... self.sum = sum; ... ... def __str__(self): ... return str(self.sum); ... ... def __add__(self , other): ... return RMB(self.sum + other.sum); ... ... def __sub__(self,other): ... return RMB(self.sum - other.sum); ... ... ... >>> a = RMB(100) >>> b = RMB(343) >>> a + b <__main__.RMB instance at 0x1783e60> >>> print a + b 443 >>> print a.__add__(b) , a + b 443 443 >>>