如何在Parent类Method中调用Child类方法?

时间:2015-01-12 19:29:32

标签: python class parent-child super

我知道这个问题可能毫无意义,但我有理由这样做。我想打电话给与super()

完全相反的东西
    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)

我在class B的{​​{1}}方法中有一堆代码,我不想在use_attack()的父方法中复制。

我想在所示的行中调用子方法use_spell()

2 个答案:

答案 0 :(得分:3)

  

我在B类的use_attack()方法中有一堆代码,我不想在use_spell()的父方法中复制。

然后将代码分解为父类的方法。这正是继承的目的。孩子们从父母那里继承代码,而不是相反。

答案 1 :(得分:0)

来自python docs:“该类型的 mro 属性列出了getattr()和super()使用的方法解析搜索顺序”

https://docs.python.org/3/library/functions.html#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()