【问题标题】:Python - overwrite variable from another class?Python - 覆盖另一个类的变量?
【发布时间】:2018-10-04 14:26:29
【问题描述】:

我想不通的简单问题: 我有(示例)文件之一:

class foo:
var = 1
def bar(self):
    print(self.var)

if __name__ == "__main__":
    foo().bar()

和文件2:

from testing import foo

class foo2:
    def bar2(self):
        foo().var = 2
        foo().bar()


foo2().bar2()

它返回 1,所以这里不会发生覆盖。

我不知道如何实际覆盖导入的类实例的变量。我检查了thisthis,但这对我没有帮助。 抱歉问了这么简单的问题,先谢谢了。

【问题讨论】:

标签: python class variables


【解决方案1】:

它正在被覆盖,但您将立即丢弃该对象。 foo().var = 2 创建一个匿名的 foo 对象,并将它的 var 分配给 2。问题是您没有保留对刚刚创建的foo 对象的reference。然后,foo().bar() 创建一个新的foo 对象,它具有var == 1(就像所有新的foo 对象,因为这就是你的类所做的)在这个new foo 对象上调用bar() 成员函数,这会将1 打印到控制台。

试试这个:

def bar2(self):
    foo_obj = foo()
    foo_obj.var = 2
    foo_obj.bar()

【讨论】:

  • 该死,我刚回到 python,foo、foo() 和 f1=foo() 之间的区别总是让我感到困惑。谢谢!附加问题:在某些情况下我所做的(“annymous”分配)有用吗?
【解决方案2】:

当您执行 foo().bar() 时,您正在创建第二个实例。

试试这个:

    test = foo()
    test.var = 2
    test.bar()
 #   foo().var = 2
 #   foo().bar()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2020-03-18
    • 2021-08-24
    相关资源
    最近更新 更多