Python 解释uu setattr的用法__
请您在下面的代码中解释Python 解释uu setattr的用法__,python,Python,请您在下面的代码中解释\uuuu setattr\uuuu方法的用法: class Human(object): def __setattr__(self,name,value): if name == 'gender': if value in ('male', 'female'): self.gender = value else : raise Attri
\uuuu setattr\uuuu
方法的用法:
class Human(object):
def __setattr__(self,name,value):
if name == 'gender':
if value in ('male', 'female'):
self.gender = value
else :
raise AttributeError('Gender can only be Male or Female')
h = Human()
h.name = 'Mary'
h.gender = 'female'
print h.gender
在您的代码中,
\uuuuu setattr\uuuuuu()
函数正在进行验证,在分配self.gender
的值时,其值应仅介于男性
和女性
之间。如果存在任何其他值,它将引发AttributeError
异常
注意:在\uuuu setattr\uuuu()
函数中,没有调用\uuuuuu setattr\uuuuu的super
,因此此函数实际上并没有更新类的属性。您应该在\uuuu setattr\uuuuu()
中添加以下行以使其正常工作:
super(Human, self).__setattr__(name, value)
关于的概述:
无论何时为类的属性指定任何值,都会调用\uuuu setattr\uuuu(self,name,value)
函数,其中name
是类的属性
,value
是要指定的新值。下面是示例代码,用于演示:
>>> class MyClass(object):
... def __init__(self, x, y):
... self.x = x
... self.y = y
... def __setattr__(self, name, value):
... print 'In Set Attr for: ', name, ', ', value
... super(MyClass, self).__setattr__(name, value)
...
...
>>> my_object = MyClass(1, 2)
In Set Attr for: x, 1
In Set Attr for: y, 2
>>> my_object.x = 10 # <-- Called while assigning value x
In Set Attr for: x, 10
>>类MyClass(对象):
... 定义初始化(self,x,y):
... self.x=x
... self.y=y
... 定义设置属性(自身、名称、值):
... 在集合属性中为:'、名称'、'和值打印'
... 超级(MyClass,self)。\uuuuu setattr\uuuuuuu(名称,值)
...
...
>>>my_对象=MyClass(1,2)
在集合属性中:x,1
在集合属性中:y,2
>>>我的对象x=10#你到底不明白什么?您是否尝试过使用例如print
来调查令人困惑的行为?阅读Python文档中关于“magic”方法的内容?检查它是否使这个类不可用。要进行值检查,请使用属性。