也许您可以定义属性并将其分配给对象,如下所示:
a = property(lambda self: getattr(self, "_a"), lambda self, x: setattr(self, "_a", x+1))
b = type("B", (object,), {"a": a, "_a": None})
结果是调用b.a = 2
会覆盖该属性。
这是我尝试使用倾斜对象进行复制的内容。
class B:
_a = None
@property
def a(self):
return self._a
@a.setter
def a(self, x):
self._a = x
这可能会提供一些线索。
class B:
_a = None
a = property(
lambda self: getattr(self, "_a"),
lambda self, x: setattr(self, "_a", x+1)
)
第一个代码段与后两个代码段有什么区别?
修改 根据搅拌机的建议我理解
a = property(lambda self: getattr(self, "_a"), lambda self, x: setattr(self, "_a", x+1))
B = type("B", (object,), {"a": a, "_a": None})
b = B()
b.a = 2
print(b.a)
>>> 3
答案 0 :(得分:4)
b = type(...)
定义了一个新类型,而不是新类型的实例。我将其重命名为B = type(...)
并像使用其他类定义一样使用它:
In [25]: a = property(lambda self: getattr(self, "_a"), lambda self, x: setattr(self, "_a", x+1))
In [26]: B = type("B", (object,), {"a": a, "_a": None})
In [27]: b = B()
In [28]: b.a = 10
In [29]: b.a
Out[29]: 11