Python:类和子类问题

Python:类和子类问题,python,class,Python,Class,我有以下代码: class main(): params = {} class a(main): def __init__(self): self.params['test'] = "111aa" print self.params class b(main): def __init__(self): self.params['be'] = "222bbb" print self.params a()

我有以下代码:

class main():
    params = {}


class a(main):
    def __init__(self):
        self.params['test'] = "111aa"
        print self.params

class b(main):
    def __init__(self):
        self.params['be'] = "222bbb"
        print self.params

a()
#{'test': '111aa'}

b()
#{'test': '111aa', 'be': '222bbb'}
我只需要从b打印
{'be':'222bbb'}
有办法吗

谢谢

试试这个:

class main(object): # use new-style classes!
    def __init__(self):
        self.params = {}

class a(main):
    def __init__(self):
        super(a, self).__init__()
        self.params['test'] = "111aa"
        print self.params

class b(main):
    def __init__(self):
        super(b, self).__init__()
        self.params['be'] = "222bbb"
        print self.params
请注意,在代码中,
params
被定义为类属性。通过在超类的
\uuuu init\uuuu
中定义它,我们声明它是一个实例属性。还要注意,子类在超类上调用
\uuuu init\uuu


通过这种方式,我们确保每个实例都有自己的
params
属性,而不共享它。您不能期望在实例之间共享一个对象,并且每个实例都有不同的值,这是一个矛盾。

params
是一个类属性。您需要一个实例属性。在
main.\uuuu init\uuuu
中设置
self.params
,并记住在子类构造函数中调用超类构造函数。是否确实要在
main
的子类之间共享
params
?如何在子类之间共享
params
,但是不是每个子类都更新相同的
参数
?这是一个非常令人困惑的“共享”概念……作为旁注,
class main():
并不违法,但它会给任何阅读它的人带来危险。如果出于某种原因确实需要一个经典类,那么编写该类的惯用方法是
classmain:
。如果你不知道最后一句话的意思,你就不想上经典课;编写
class main(object):
。在我的书中,调用类
main
看起来非常糟糕。实际上这并不是错的,但是
main
的其他用法已经非常广为人知,并且非常流行,如果您在一个真正具有
main
函数的程序中不小心使用了这个类,那么这个类可能会很麻烦。这是一个很好的答案,也是对这个问题的一个很好的解释。我唯一的建议是使用
super()
调用
main
\uuuu init\uuuu
方法,而不是显式地命名超类。这是因为
super
支持多重继承,否则很难或不可能。