python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python多继承时子类调用指定父类

Python多继承时子类如何调用指定父类

作者:彭世瑜

这篇文章主要介绍了Python多继承时子类如何调用指定父类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Python多继承时子类调用指定父类

在Python中,如果一个子类继承自多个父类,并且这些父类都有相同名称的方法,你可以使用父类名直接调用指定父类的方法。

# -*- coding: utf-8 -*-

class Parent1:
    def my_method(self):
        print("Parent1's my_method")


class Parent2:
    def my_method(self):
        print("Parent2's my_method")


class Child(Parent1, Parent2):
    def call_parent1_method(self):
        Parent1.my_method(self)


if __name__ == '__main__':
    c = Child()
    c.call_parent1_method()  # 输出: Parent1's my_method

在上面的例子中,Child 类同时继承了 Parent1 和 Parent2。

如果你需要在 Child 的实例方法中调用 Parent1 的 my_method,你可以直接使用 Parent1.my_method(self) 来调用。

这里的 self 是用来指向子类实例的,确保方法可以访问到实例的属性。

Python子类继承父类构造函数说明

(1) 如果在子类中需要的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。

子类不重写__init__,实例化子类时,会自动调用父类定义的__init__。

实例:

class Father(object):
    def __init__(self, age):
        self.age=age
        print ( "age: %d" %( self.age) )
    def getAge(self):
        print('父类的返回结果')
        return self.age
 
class Son(Father):
    def getAge(self):
        print('子类的返回结果:')
        return self.age
 
if __name__=='__main__':
    son=Son(18)
    print ( son.getAge() )

输出结果:

age: 18
子类的返回结果:
18

子类没有初始化__init__ 方法,所以默认会自动调用父类定义的__init__,因此会出现一行:age: 18

(2)如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__

实例

class Father(object):
    def __init__(self, age):
        self.age=age
        print ( "age: %d" %( self.age) )
    def getAge(self):
        return self.age
 
class Son(Father):
    def __init__(self, age):
        print ( "hello world" )
        self.age =  age
    def getAge(self):
        return self.age
 
if __name__=='__main__':
    son=Son(18)
    print (son.getAge() )

输出结果:

hello world
18

子类有初始化__init__ 方法,则会调用自身的初始化方法,因此不会出现上面实例中那样的:age: 18

(3)如果重写了__init__时,要继承父类的构造方法,可以使用super关键字:

super(子类,self).__init__(参数1,参数2,....)

或者另一种经典的方法:

父类名称.__init__(self,参数1,参数2,...)

实例:

class Father(object):
    def __init__(self, age):
        self.age=age
        print ( "name: %s" %( self.age))
    def getage(self):
        return self.age
 
class Son(Father):
    def __init__(self, age):
#         super(Son, self).__init__(age)  # 1:super方法
        Father.__init__(self,age)         # 2: 经典方法
        print ("hello world")
        self.age =  age
    def getage(self):
        return self.age
 
if __name__=='__main__':
    son=Son(18)
    print ( son.getage() )

输出结果:

name: 18
hello world
18

可以看到,会出现父类中的初始化输出结果: name: 18,也会出现子类初始化中输出结果:hello world

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文