【问题标题】:Trouble with Python InheritancePython继承问题
【发布时间】:2011-08-25 16:58:39
【问题描述】:

我实际遇到问题的代码很长,所以我做了一个例子来显示我的问题。

我有两个继承自基类 (BaseClass) 的类。这两个类都向 self.Dict 添加了一些元素。但是,它们似乎会交叉污染元素。我期待 c0.Dict 返回 {'class0': 0}c1.Dict 返回 {'class1': 1}。但是它们都返回 {'class0': 0, 'class1': 1}。为什么它们会交叉污染?

class BaseClass :
    def __init__ (self, _dict={}) :
        self.Dict = _dict

class Class0 (BaseClass) :
    def __init__ (self) :
        BaseClass.__init__(self)
        self.Dict['class0'] = 0

class Class1 (BaseClass) :
    def __init__ (self) :
        BaseClass.__init__(self)
        self.Dict['class1'] = 1

c0 = Class0()
c1 = Class1()

print c0.Dict
print c1.Dict 

【问题讨论】:

    标签: python class inheritance object


    【解决方案1】:

    你遇到了一个 python 陷阱:可变默认参数。

    http://blog.objectmentor.com/articles/2008/05/22/pythons-mutable-default-problem

    class BaseClass :
        def __init__ (self, _dict=None) :
            self.Dict = _dict or {}
    

    【讨论】:

    • 哈哈,我没想到会这样。我几乎把头发拉了出来,试图找出我的程序中一些奇怪的副作用来自哪里。谢谢!
    • 另外,您发布的修复解决了这个问题。也感谢您的快速回复。
    • 是的,当我击中那个时我感觉就像你一样,即WTF? (几个小时后)该死的,好吧……
    猜你喜欢
    • 2019-04-10
    • 2010-10-30
    • 2011-12-04
    • 1970-01-01
    • 2012-08-08
    • 2021-05-08
    相关资源
    最近更新 更多