解释\uuu setattr的用法__

2024-04-20 05:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

你能解释一下__setattr__方法在下面代码中的用法吗

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

Tags: 方法代码nameinself用法ifobject
1条回答
网友
1楼 · 发布于 2024-04-20 05:46:09

在您的代码中,__setattr__()函数正在进行验证,在指定self.gender的值时,它的值应该只在malefemale之间。如果有任何其他值,它将引发AttributeError异常。你知道吗

注意:__setattr__()函数中,没有对__setattr__super的调用,因此该函数实际上并没有更新类的属性。您应该在__setattr__()中添加以下行,以便使其正常工作:

super(Human, self).__setattr__(name, value)

关于^{}的概述

无论何时为类的属性赋值,__setattr__(self, name, value)函数都会被调用,其中nameclass的属性,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

相关问题 更多 >