父类方法

时间:2015-07-23 03:03:53

标签: python

我试着写一个简单的设置来调用父类@classmethod但是得到错误...请告诉我这里的问题是什么?

class Parent(object):
        def __init__(self):
            print "Parent initialized"

        @classmethod    
        def resource_setup(cls):
            print "parent method"




class Child(Parent):
        def __init__(self):
            print "Child initialized"

        @classmethod    
        def childmethod(cls):
            super(Parent, cls).resource_setup()
            print "child method"


c = Child()            
Child().childmethod()

输出:

Child initialized
Child initialized
Traceback (most recent call last):
  File "C:\Users\ANAND\workspace\Scratch\Scratch\Parent.py", line 30, in <module>
    Child().childmethod()
  File "C:\Users\ANAND\workspace\Scratch\Scratch\Parent.py", line 25, in childmethod
    super(Parent, cls).resource_setup()
AttributeError: 'super' object has no attribute 'resource_setup'

问题:

1. When I create a child object c = Child(), I don't see the display of "parent initialized"..I expect the Parent class to be initialized.


2.How can I call the parent method @classmethod from the child @classmethod?

2 个答案:

答案 0 :(得分:0)

您需要致电super(Child, cls)super的第一个参数应该是要调用方法的超类,而不是超类本身。

你的问题1是无关的。如果您希望孩子__init__致电家长__init__,则需要使用super明确表达,就像使用parentmethodchildmethod一样。 (也就是说,从孩子super(Child, self).__init__()内做__init__

答案 1 :(得分:0)

  1. 当我创建一个子对象c = Child()时,我没有看到“parent initialized”的显示。我希望初始化Parent类。

    答:在python中,派生类__init__不会隐式调用基类的__init__,需要显式调用它。不像c ++中的构造函数那样,如果你是c ++程序员,这可能会引起一些混淆。

  2. 如何从孩子@classmethod调用父方法@classmethod?

    答:使用super(Child, cls)而不是super(Parent, cls)