Python类的特性方法

来源:互联网 发布:中车株洲电力机车知乎 编辑:程序博客网 时间:2024/05/16 02:49

专用方法产生的原因:它们提供了一种,可以将非调语法映射到方调用上。 

以下内容转自JavaEye / 作者:wangtong40

================================

Python 类可以定义的专用方法。专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。
6.5.1    __init__
类似于构造函数。
6.5.2    __del__
类似于析构函数
6.5.3    __repr__
使用repr(obj)的时候,会自动调用__repr__函数,该函数返回和eval()兼容的对象字符串表达式,用于重建对象,如果eval(repr(obj))会得到一个对象的拷贝。

Python代码
  1. class A:   
  2.     def __repr__(self):   
  3.         return 'A()'  
  4.       
  5. x = A()   
  6. print repr(x)   
  7. b = eval(repr(x)) # 拷贝对象a   
  8. print b  
[python] view plaincopyprint?
  1. class A:  
  2.     def __repr__(self):  
  3.         return 'A()'  
  4.      
  5. x = A()  
  6. print repr(x)  
  7. b = eval(repr(x)) # 拷贝对象a   
  8. print b  

 



6.5.4    __str__
返回一个字符串用于描述字符串本身。
6.5.5    __cmp __
比较运算符,0:等于 1:大于 -1:小于

Python代码
  1. class Dog:   
  2.     def __cmp__(self, other):   
  3.         if other > 0 :   
  4.             return 1  
  5.         elif other < 0:   
  6.             return - 1  
  7.         else:   
  8.             return 0  
  9.   
  10. dog = Dog()   
  11. if dog > -10:print 'ok'  
  12. if dog < -10:print 'ok'  
  13. if dog == 0:print 'ok'  
[python] view plaincopyprint?
  1. class Dog:  
  2.     def __cmp__(self, other):  
  3.         if other > 0 :  
  4.             return 1  
  5.         elif other < 0:  
  6.             return - 1  
  7.         else:  
  8.             return 0  
  9.   
  10. dog = Dog()  
  11. if dog > -10:print 'ok'  
  12. if dog < -10:print 'ok'  
  13. if dog == 0:print 'ok'  

 

Python代码
  1. class Zoo:   
  2.     def __getitem__(self, key):   
  3.         if key == 'dog':return 'dog'  
  4.         elif key == 'pig':return  'pig'  
  5.         elif key == 'wolf':return 'wolf'  
  6.         else:return 'unknown'  
  7.   
  8. zoo = Zoo()   
  9. print zoo['dog']   
  10. print zoo['pig']   
  11. print zoo['wolf']  
[python] view plaincopyprint?
  1. class Zoo:  
  2.     def __getitem__(self, key):  
  3.         if key == 'dog':return 'dog'  
  4.         elif key == 'pig':return  'pig'  
  5.         elif key == 'wolf':return 'wolf'  
  6.         else:return 'unknown'  
  7.   
  8. zoo = Zoo()  
  9. print zoo['dog']  
  10. print zoo['pig']  
  11. print zoo['wolf']  

 


输出结果:ok    ok



6.5.6    __getitem__
__getitem__ 专用方法很简单。象普通的方法 clear,keys 和 values 一样,它只是重定向到字典,返回字典的值。

输出结果:dog    pig        wolf
6.5.7    __setitem__

Python代码
  1. __setitem__ 简单地重定向到真正的字典 self.data ,让它来进行工作。   
  2. class Zoo:   
  3.     def __setitem__(self, key, value):   
  4.         print 'key=%s,value=%s' % (key, value)   
  5.   
  6. zoo = Zoo()   
  7. zoo['a'] = 'a'  
  8. zoo['b'] = 'b'  
  9. zoo['c'] = 'c'  
[python] view plaincopyprint?
  1. __setitem__ 简单地重定向到真正的字典 self.data ,让它来进行工作。  
  2. class Zoo:  
  3.     def __setitem__(self, key, value):  
  4.         print 'key=%s,value=%s' % (key, value)  
  5.   
  6. zoo = Zoo()  
  7. zoo['a'] = 'a'  
  8. zoo['b'] = 'b'  
  9. zoo['c'] = 'c'  

 



输出结果:dog    pig        wolf

key=a,value=a
key=b,value=b
key=c,value=c

6.5.8    __delitem__

Python代码
  1. class A:   
  2.     def __delitem__(self, key):   
  3.         print 'delete item:%s' % key   
  4.   
  5. a = A()   
  6. del a['key']