考虑以下两个类定义,其中,为了在将值分配给属性之前进行额外的检查(例如,跟踪修改的变量、检查有效性等),我在第一个类定义中重写了 __setattr__
方法,在第二个方法中我使用属性。
class A(object):
def __init__(self, x):
self.x = x
def __setattr__(self, name, value):
# do something
self.__dict__[name] = value
class B(object):
def __init__(self, x):
self.x = x
@property
def x(self):
return self.x
@x.setter
def x(self, v):
# do something
self.x = v
对我来说,他们的行为方式看起来是一样的。
两者有什么区别吗?应该首选哪一个?为什么?
最佳答案
__setattr__
更为通用,因为无论您提供什么属性 foo
,它都会针对 A().foo = 3
运行。属性 setter 特定于单个显式定义的属性,不能用于“意外”创建属性。
关于python - __setattr__ 与类属性设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52105186/