简体   繁体   中英

How do I call a Child class method from within a Parent class Method?

I know this question might be pointless but there is a reason why I am looking to do it this way. I want to call something exactly opposite to 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)

I have a bunch of code in class B 's use_attack() method that I would not like to replicate in the parent method of use_spell() .

I would like to call the child method use_attack() in the line indicated.

I have a bunch of code in class B's use_attack() method that I would not like to replicate in the parent method of use_spell() .

Then factor that code out into a method on the parent class. This is exactly what inheritance is for. Children inherit code from parents, not the other way around.

From the python docs: "The mro attribute of the type lists the method resolution search order used by both getattr() and super()"

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

This should help shed some light on Inheritance and Method Resolution Order (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()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM