2015-01-12 3 views
1

나는이 질문이 무의미 할 수도 있음을 알고있다. 그러나 내가 왜 그렇게 할 수 있는지에 대한 이유가있다. 난 내가 use_spell()의 부모 방법에 복제 좋아하지 않을 class Buse_attack() 방법 코드의 무리가 super()부모 클래스 메서드 내에서 Child 클래스 메서드를 호출하려면 어떻게해야합니까?

class A(object): 
     def use_attack(self, damage, passive, spells): 

      #do stuff with passed parameters 
      #return something 

     def use_spell(self, name , enemy_hp): 

      #other code  

      if name == 'Enrage': 
       #call child method use_attack right here 


    class B(A): 
     def use_attack(self): 

      #bunch of code here 

      return super(B, self).use_attack(damage, passive, spells) 

     def use_spell(self, name , enemy_hp): 

      return super(B , self).use_attack(name ,enemy_hp) 

    b = B() 
    b.use_spell('Enrage', 100) 

정반대 뭔가를 호출합니다.

표시된 줄에 자식 메서드 use_attack()을 호출하고 싶습니다.

답변

3

클래스 B의 use_attack() 메소드에는 use_spell()의 부모 메소드에서 복제하고 싶지 않은 코드 묶음이 있습니다.

그런 다음 상위 클래스의 메소드에 코드를 지정합니다. 이것은 바로 상속을위한 것입니다. 자녀는 부모로부터 코드를 상속받습니다.

파이썬 문서에서
+0

방금 ​​완전히 새로운 수준의 수업을 생각하게 만들었습니다. 나는 지금까지 상속을 이해했다고 생각하지 않는다. 도와 줘서 고마워! – Loupi

+0

굉장! OOP는 당신이 그 초기 통찰력을 얻을 때 정말 재미 있습니다. 다행히 도울 수 있었고 여기에는 더 많은 것이 있습니다. :) –

0

는 :

https://docs.python.org/3/library/functions.html#super

이이 되거 도움이 될 것 "유형의 MRO 속성은 방법 해상도 ​​검색 모두 getattr에서 사용하기 위해()와 super()를 나열" 상속 및 메서드 확인 순서 (mro).

class Foo(object): 
    def __init__(self): 
     print('Foo init called') 
    def call_child_method(self): 
     self.child_method() 

class Bar(Foo): 
    def __init__(self): 
     print('Bar init called') 
     super().__init__() 
    def child_method(self): 
     print('Child method called') 

bar = Bar() 
bar.call_child_method() 
관련 문제