用属性替换实例的属性

我想用一个属性覆盖一个属性,但只在一个实例上。这是我尝试解决它的方法,但它没有做我想做的事情:


class Foo:

    def __init__(self):

        self.bar = True

        self._hidden = False


a = Foo()

print(a.bar)

a.bar = property(lambda self: self._hidden)

print(a.bar)



>>> C:\Users\Ilya\AppData\Local\Programs\Python\Python37-32\python.exe C:/Users/Ilya/pydolons/experiment.py

>>> True

>>> <property object at 0x0323B960>

可以做到吗?启用类属性而不是实例上设置的 dunder 调用的实际机制是什么?


以下代码执行我想做的事情,但它修改了类:


class Foo:

    def __init__(self):

        self.bar = True

        self._hidden = False


a = Foo()

print(a.bar)

Foo.bar = property(lambda self: self._hidden)

print(a.bar)


>>> C:\Users\Ilya\AppData\Local\Programs\Python\Python37-32\python.exe C:/Users/Ilya/pydolons/experiment.py

>>> True

>>> False


蛊毒传说
浏览 215回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python