__init__ 初始化 一般是用来定义属性的一个方法
__str__ 可以让类打印出来
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __str__(self):
return '(Person: %s, %s)' % (self.name, self.gender)
>>> p = Person('XIAOMING', 'male')>>> print p
(Person: XIAOMING, male)
__getattr__调用了没有定义的属性时,返回特定的东西。
class Student(object):
def __init__(self):
self.name = 'Michael'
def __getattr__(self, attr):
if attr=='score':
return 99
当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, 'score')来尝试获得属性,这样,我们就有机会返回score的值:
>>> s = Student()
>>> s.name
'Michael'
>>> s.score
99__setattr__
会拦截所有属性的的赋值语句。如果定义了这个方法,self.attr= value 就会变成self,__setattr__("attr", value).这个需要注意。当在__setattr__方法内对属性进行赋值是,不可使用self.attr = value,因为他会再次调用self,__setattr__("attr", value),则会形成无穷递归循环,最后导致堆栈溢出异常。应该通过对属性字典做索引运算来赋值任何实例属性,也就是使用self.__dict__['name'] = value.
本文介绍了Python中类的__init__,__str__,__getattr__及__setattr__方法的用途与实现细节。__init__用于初始化属性;__str__使类实例可被打印;__getattr__在尝试获取未定义属性时返回默认值;而__setattr__则拦截所有属性赋值。
6698

被折叠的 条评论
为什么被折叠?



