将属性对象分配给内联对象

时间:2016-12-05 19:51:13

标签: python

也许您可以定义属性并将其分配给对象,如下所示:

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

1 个答案:

答案 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
相关问题