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
支持多重继承,否则很难或不可能。