频道栏目
首页 > 资讯 > Python > 正文

Python 中的类的相关操作

13-07-18        来源:[db:作者]  
收藏   我要投稿
构造函数
 
构造函数是任何类都有的特殊方法。当要创建一个类时,就要调用构造函数。他的名字是__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 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'  
>>  

>>> 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  
>>>   

>>> 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
>>> 

 

 
相关TAG标签
上一篇:linux ftp批量上传和下载文件
下一篇:FTP服务器vsftpd安装架设
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站