我有下面的类:的Python - 物业从列表设置使最大递归深度超过
class vehicle(object):
def __init__(self, name):
self.name = name
self.kinds_list = ["tank", "car", "motorbike", "bike", "quad" ]
@property
def kind(self):
return self.kind
@kind.setter
def kind(self, x):
if x in self.kinds_list:
self.kind = x
else:
raise AttributeError('No attribute {0} found !'.format(y))
设置一种使最大递归深度超过又名堆栈溢出。
问:如何重新编写setter以使其仅与固定列表一起工作?
你只想要某些允许的属性?也许你应该看看'__slots__',而不是......或者是__setattr__' ......也许如果你在段落中解释了你想实现的目标...... –
你可以使用'self.kind = x'来实现setter再次调用setter?为底层属性和属性使用不同的名称。 – millimoose
@JonClements尽管不是远程堆栈溢出的原因。你的建议在这个特定的情况下很有用,但是不会帮助OP在一般情况下正确使用'@ property'。 – millimoose