【问题标题】:How to revert an instance to use the class attribute instead of the shadowing instance attribute?如何恢复实例以使用类属性而不是阴影实例属性?
【发布时间】:2020-07-26 08:27:13
【问题描述】:

如果我有一个类和它的两个实例:

class Foo:
    var = 1

a = Foo()
b = Foo()

两个实例的var 属性反映了我将为Foo 设置的值:

Foo.var = 2
print(a.var)  # 2
print(b.var)  # 2

但是当我将var 设置为仅a 时,a.var 不再与Foo.var“同步”:

a.var = 3
Foo.var = 4
print(a.var)  # 3
print(b.var)  # 4

我能否以某种方式“还原”这个而不创建新实例,以便a.var 将再次反映Foo.var 的值?

明显的尝试不起作用(显然),因为整数不是引用:

a.var = Foo.var
print(a.var)  # 4
Foo.var = 5
print(a.var)  # 5

【问题讨论】:

  • ...del a.var?
  • @jonrsharpe 嗯,这太简单了,谢谢!,我把它当作答案,以防其他人将来会想知道这个:D

标签: python attributes language-lawyer instance-variables class-attributes


【解决方案1】:

可以删除实例属性,然后a 将再次使用Foo 中定义的var

del a.var
Foo.var = 6
print(a.var)  # 6

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2011-11-24
    • 2022-11-27
    相关资源
    最近更新 更多