【问题标题】:Can any one explain this Python behaviour? [duplicate]任何人都可以解释这种 Python 行为吗? [复制]
【发布时间】:2019-06-02 15:25:51
【问题描述】:

我无法理解这段代码。

我调用了dd 3次,为什么每次都没有删除函数的前一个堆栈?

我得到这个输出:

11
12
13

您能解释一下解决方案吗?另外,还有什么地方会出现这个问题?

class Hello():
    v=10

class K():
    a=Hello()
    def p(self):
        self.a.v=self.a.v+1
        print(self.a.v)
        self.a=None
def dd(): 
    ff=K()
    ff.p()
    del(ff)
dd()
dd()
dd()

【问题讨论】:

  • 您正在更改 Ka 类属性,因此它会影响该类的所有实例
  • a 是一个类变量,在K 的所有实例之间共享。见docs.python.org/3/tutorial/…
  • 谢谢我现在明白了..

标签: python


【解决方案1】:

当你删除 ff 时,你正在删除一个从 K 继承属性(从 Hello() 继承属性)的新对象。

当属性被继承到一个对象时,它们会一起改变,但不会一起被删除。您将需要重新初始化属性以使它们恢复原状。

【讨论】:

    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2013-06-15
    • 2011-12-01
    • 2016-01-14
    • 1970-01-01
    • 2011-03-31
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多