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”方法的内容?检查它是否使这个类不可用。要进行值检查,请使用属性。