Python __设置属性的setattr_u; vs类属性
考虑以下两个类定义,为了在为属性赋值之前进行额外检查(例如,跟踪修改的变量、检查有效性等),在第一个类定义中,我覆盖Python __设置属性的setattr_u; vs类属性,python,class,methods,Python,Class,Methods,考虑以下两个类定义,为了在为属性赋值之前进行额外检查(例如,跟踪修改的变量、检查有效性等),在第一个类定义中,我覆盖\uuu setattr\uuuu方法,在第二个类定义中,我使用属性 class A(object): def __init__(self, x): self.x = x def __setattr__(self, name, value): # do something self.__dict__[name] =
\uuu setattr\uuuu
方法,在第二个类定义中,我使用属性
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
在我看来,他们的行为方式是一样的。这两者有什么区别吗?应该首选哪一个以及原因?
\uuuu setattr\uuuu
更一般,因为它将为A().foo=3
运行,而不管您提供什么属性foo
。属性设置器特定于单个显式定义的属性,不能用于“意外”创建属性