使用属性装饰器的python类中的属性行为
我对使用属性装饰器时属性变量在类中的行为感到困惑 请参见此示例:使用属性装饰器的python类中的属性行为,python,oop,properties,decorator,Python,Oop,Properties,Decorator,我对使用属性装饰器时属性变量在类中的行为感到困惑 请参见此示例: class Example: def __init__(self, x): self.x = x @property def x(self): return self.__x @x.setter def x(self, x): self.__x = x 这很好,但是怎么做呢?setter属性(self.\ux)中的变量尚未在构造函数中“定义”,因此如何为其赋值 其他东西也可以使用,
class Example:
def __init__(self, x):
self.x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
self.__x = x
这很好,但是怎么做呢?setter属性(self.\ux
)中的变量尚未在构造函数中“定义”,因此如何为其赋值
其他东西也可以使用,例如,使用上面定义的同一个类并向其添加新成员函数:
def set_val_x(self):
self.__x = 8765
同样,使用这个函数实际上是有效的,类似于property.setter(但它没有使用属性装饰器)。在Python中,您不必在构造函数中定义变量。您可以随时分配它们
Foo类:
def ____;初始(自,条形):
self.bar=bar
my_foo=foo(3)
我的另一件事=6
例如,它是完全合法的。在Python中,您不必在构造函数中定义变量。您可以随时分配它们
Foo类:
def ____;初始(自,条形):
self.bar=bar
my_foo=foo(3)
我的另一件事=6
例如,是完全合法的。在
\uuuuu init\uuuuuu
中,行
self.x = x
不再是
setattr(self, 'x', x)
因为class属性Example.x
存在。您不再创建实例属性x
,而是调用
type(self).X.__set__(self, 'x', x)
这将设置实例属性\uux
可以随时创建、修改或删除实例属性。
\uuuuu init\uuuuu
方法只是创建它们的一个方便的单一位置,因为每次创建实例时都会自动调用它
self.x = x
不再是
setattr(self, 'x', x)
因为class属性Example.x
存在。您不再创建实例属性x
,而是调用
type(self).X.__set__(self, 'x', x)
这将设置实例属性\uux
可以随时创建、修改或删除实例属性。
\uuuuu init\uuuuuu
方法只是一个创建它们的简单方便的地方,因为每次创建实例时都会自动调用它。Python中不要求必须在构造函数中初始化对象的属性。Python允许您根据需要创建任意属性(除非您正在使用例如\uuuuuuuuuuuuuuuuuuu
).A属性是通过实例调用时具有特殊行为的类属性。类属性Example.x
由时间示例定义得很好。\uuuu init\uuu
从未运行过。Python中不要求必须在构造函数中初始化对象的属性。Python允许您创建任意属性根据需要(除非您正在使用例如\uuu slots\uuu
)。属性是通过实例调用时具有特殊行为的类属性。类属性Example.x
由时间示例定义得很好。\uu init\uu
始终运行。