【发布时间】:2018-08-17 00:53:50
【问题描述】:
我想创建具有“名称”和“性别”属性的“人类”类。我想将“性别”属性的分配限制为“男性”或“女性”。为此,我们重写了 __setattr__(self, name, value)。
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 = 'Sweety'
h.gender = 'female'
print(h.gender)
但我遇到了以下异常:
[Previous line repeated 328 more times]
File "/Users/admin/algorithms/betright_test.py", line 143, in **__setattr__**
if name == 'gender':
RecursionError: maximum recursion depth exceeded in comparison
但是如果我传递了错误的性别(h.gender = 'f') 它会给我正确的错误(AttributeError: Gender can only be "male" or "female")
当我通过正确的性别时,我无法弄清楚出了什么问题。
【问题讨论】:
标签: exception recursion python-3.6 setattr