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.a
和MCinst.b
,默认值分别是False
和0
。我试图用 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)
针对我的问题考虑以下最小示例:
class MyClass:
a = False
b = 0
if a:
b = 1
MCinst = MyClass()
这里MCinst
有两个属性,MCinst.a
和MCinst.b
,默认值分别是False
和0
。我试图用 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)