python - Python 继承的问题

标签 python class inheritance object

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

我有两个继承自基类 (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 陷阱:可变的默认参数。

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

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

关于python - Python 继承的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005316/

相关文章:

c++ - 执行一个函数来影响不同的模板类实例

c# - 不能将 2 个后代加入其 parent 的同一集合下

C++构造函数继承无匹配函数

python - Python 中的二维最近邻插值

javascript - 如何在新创建的模块中从 Odoo v8 中的 Javascript 文件调用 python 函数?

php - 创建简单的 Codeigniter 库

c++ - 类外改变类的值

c++ - 如何从 C++ 中的 header 中的类创建继承类

python - 在 python 中序列化 float32 值并在 C++ 中反序列化它们

python - Python中的购物 list