Python:如何:依赖标志的实例属性,标志本身就是该实例/对象的属性

Python: How to: attribute of an instance which depends on flag, which is itself an attribute of that instance / object

针对我的问题考虑以下最小示例:

class MyClass:
    a = False
    b = 0
    if a:
        b = 1

MCinst = MyClass()

这里MCinst有两个属性,MCinst.aMCinst.b,默认值分别是False0。我试图用 if 语句实现的是,当我设置 MCinst.a = True 时,MCinst.b 的值会自动切换到 1。但这显然不能按预期工作,因为 MCinst.b 的值保持 0.

我知道我可以删除 if 语句并从外部简单地修改 b,就像我修改 a 的方式一样。但我仍然很好奇是否有办法让工作成为我想要的——即当我更改同一实例的另一个属性时自动更改实例的属性。

class MyClass:
    a = False
    b = 0     

    def __setattr__(self, key, value):
        if key == 'a':
            setattr(self, 'b', 1)
        super().__setattr__(key, value)

如果你真的想改变class属性,你可以使用

setattr(self.__class__, 'b', 1)