PYTHON类的特殊方法

实例1:

[python] view plain copy
  1. #-*-coding:UTF-8-*-  
  2.   
  3. class  FirstDemo(object):  
  4.     """ 
  5.         这里是一个doc 
  6.     """  
  7.     a=10   #类属性  
  8.     def  demo(self):  
  9.         """ 
  10.         第一个方法 
  11.         """  
  12.         pass  
  13.     def demo2(self):  
  14.         """ 
  15.         第二个方法 
  16.         """  
  17.         pass  
  18. print FirstDemo.__dict__   #打印出FirstDemo类的所有属性和方法,结果为一个字典  
  19. print FirstDemo.__bases__  #类的基类  
  20. print FirstDemo.__doc__    #类的docstring  
  21. print FirstDemo.__name__   #类的名字  
  22. print FirstDemo.__module__ #类所在模块,如果是主文件,就是__main__  
  23.   
  24.   
  25. print FirstDemo().__class__    #类的类型<class '__main__.FirstDemo'>  
  26. print FirstDemo().__module__   #实例类型所在模块  
  27. print FirstDemo().__dict__     #对象的字典,存储所有实例成员信息  


 实例2:

[python] view plain copy
  1. #-*-coding:UTF-8-*-  
  2.   
  3. class  FirstDemo(object):  
  4.     b=100   #类属性  
  5.     def __init__(self):  
  6.         FirstDemo.b=200  
[python] view plain copy
  1.     def __repr__(self):  
  2.         return "repr方法"  
  3.     def __str__(self):  
  4.         return "str方法"  
  5.     def  demo(self):  
  6.         print FirstDemo.b  
  7. a=FirstDemo()  
  8. print a.__repr__()  
  9. print a.__str__()  
  10. print "--------"  
  11. a.demo()  


结果:

repr方法
str方法
--------
200

序号目的所编写代码Python 实际调用
初始化一个实例x = MyClass()x.__init__()
字符串的“官方”表现形式repr(x)x.__repr__()
字符串的“非正式”值str(x)x.__str__()
  
  

最后打印的b的值为200,是因为__init__()方法的调用发生在实例被创建之后。

实例3(对象属性的操作):

[python] view plain copy
  1. #-*-coding:UTF-8-*-  
  2.   
  3. class  FirstDemo(object):  
  4.     b=100   #类属性  
  5.     def __init__(self):  
  6.         FirstDemo.b=200  
  7.     def __repr__(self):  
  8.         return "repr方法"  
  9.     def __str__(self):  
  10.         return "str方法"  
  11.     def  demo(self):  
  12.         print FirstDemo.b  
  13. a=FirstDemo()  
  14. a.temp=500   #为对象添加一个属性  
  15. print a.__dict__  #查看对象的实例属性字典  
  16. print dir(a)   #列出实例的属性和方法集合  
  17. del a.temp  #删除对象中的temp属性  
  18. print a.__dict__  
  19. print dir(a)



   

基本属性
x.__init__()   初始化一个实例,在实例创建之后立即调用,并且这个方法没有返回值(无return语句)
x.__repr__()  字符串的“官方”表示方法  >>> x  <==> >>>x.__repr__()
x.__str__()   字符串的非正式值   等同于  print x
x.__new__()  一般是用来生成一个不可变实例,控制实际创建的进程


迭代器
seq.__iter__()  遍历某个序列
seq.__next__()  从迭代器中获取下一个值

把一个对象生命成迭代器的过程:
__init__()方法执行赋值操作;__iter__() 中return self


计算属性
x.__getattribute__('my_property')    无条件获取一个计算属性;
如果某个类定义了 __getattribute__() 方法,在每次引用属性或者方法名称时候,Python 都调用它(特殊方法名称除外,因为那样将会导致讨厌的无限循环)。

x.__getattr__('my_property')            获取一个计算属性(后备)
如果某个类定义了 __getattr__() 方法,Python 将只在正常的位置查询属性时才会调用它。
如果实例 x 定义了属性 color, x.color 将不会调用x.__getattr__('color');而只会返回 x.color 已定义好的值。

x.__setattr__('my_property',value)   设置某一属性
x.__delattr__('my_attribute')             删除某一属性
x.__dir__()                                        列出某一属性和方法
如果定义了 __getattr__() 或 __getattribute__() 方法, __dir__() 方法将非常有用。通常,调用 dir(x) 将只显示正常的属性和方法。如果 __getattr()__ 方法动态处理color 属性, dir(x) 将不会将 color 列为可用属性。可通过覆盖 __dir__() 方法允许将 color 列为可用属性,对于想使用你的类但却不想深入其内部的人来说,该方法非常有益。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值