构造函数

构造函数是任何类都有的特殊方法。当要创建一个类时,就要调用构造函数。他的名字是__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
>>> 


 

 

Python 中的类的相关操作_操作符