2015-07-23 7 views
-1

Я пытаюсь написать простую установку, чтобы вызвать родительский класс @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? 

ответ

0

Вам нужно позвонить super(Child, cls). Первым аргументом для super должен быть класс, суперкласс которого вы хотите вызвать, а не сам суперкласс.

Ваш вопрос 1 не имеет отношения. Если вы хотите, чтобы ребенок __init__ вызывал родителя __init__, вам нужно сделать это явно с помощью super, как и с parentmethod и childmethod. (То есть, сделать super(Child, self).__init__() изнутри ребенка __init__.

0
  1. Когда я создаю дочерний объект с = Child(), я не вижу отображение «родителя инициализирован» .. Я ожидаю, что родительский класс для инициализации

    A:. в питоне, производный класс __init__ не называет базовый класс __init__ неявно, вам нужно вызвать его явно не как конструктор в C++ делать, что может привести к немного запутать, если вы. C++.

  2. Как я могу вызвать родительский метод @classmethod от дочернего @classmethod?

    A: Использовать super(Child, cls) не super(Parent, cls).

Смежные вопросы