我需要在设置†之前检查属性。一个天真的实现将是这样的:
class C(object):
x = 5
def __setattr__(self, name, value):
if hasattr(self, name):
x = getattr(self, name)
if x == 5:
print 'do something'
object.__setattr__(self, name , value)
但是,这会引发课程的发生。 __getattribute__
方法,必须在此避免。据我所知,在课堂上搜索' __dict__
直接可以做到这一点;但由于这是一个由用户划分的类,我想__slots__
和MRO可能会增加复杂性。
考虑到这些因素,在设置属性之前检查属性的最佳方法是什么?
† 为了完全披露,本课程实际上将被写为C
分机;但是,我不能想象这个策略在python实现方面偏离了太多问题。
答案 0 :(得分:1)
如何使用property
装饰器?
class C(object):
def __init__(self):
self._x = 5 # Default, for all
# Future updates should be done with self.x = ...
# To go through the approval below
@property
def x(self):
return self._x
@x.setter
def x(self, value):
if value == 5:
print 'do something'
else:
self._x = value