您当前的位置: 首页 >  Python

令狐掌门

暂无认证

  • 3浏览

    0关注

    513博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

python继承

令狐掌门 发布时间:2020-03-14 21:30:57 ,浏览量:3

       pyhon和C++一样,允许继承,多继承,方法重写等。继承时,父类必须与派生类定义在一个作用域内 。

一 、 python继承

       例如父类Parent

class Parent:
    age = 50
    name = "asdf"

    # 以双下划线开头的是私有成员
    __si = 100

    # 构造函数
    def __init__(self, age, name):
        print("先运行父类构造方法")
        self.age = age
        self.name = name

    #普通成员函数,第一个是默认参数self,表示类的示例
    def fun(self):
        self.__shuchu()
        print("i = %d" % self.i)

    def OutInfo(self):
        print("Parent age = %d" % self.age,"name = " + self.name)

    #私有方法
    def __shuchu(self):
        print("这是私有方法")

    def printSiyou(self):
        print("私有成员 = %d" % self.__si)

       子类Son派生于类Parent

class Son(Parent):
    def __init__(self):
        print("子类构造函数")

    def fun(self):
        print("重写了父类的fun方法")

测试代码:

son = Son()
son.OutInfo()
son.fun()
son.printSiyou()

输出结果

       子类构造函数
       Parent age = 50 name = asdf
       重写了父类的fun方法
       私有成员 = 100

       子类对象在实例化时并没有调用父类的构造函数,这是为什么?

       这和C++不同, C++的子类在实例化时会调用父类的构造函数,python有所不同。python如果子类重写了__init__ 时,实例化子类,就不会调用父类已经定义的__init__。

        例如下面的代码, 子类不写默认的构造函数,那么,在实例化时,就会先调用父类的构造函数

class Son(Parent):
    # def __init__(self):
    #     print("子类构造函数")

    def fun(self):
        print("重写了父类的fun方法")

二 、方法重写

        如果子类实现了和父类相同的方法,这种成为方法重写,子类在调用时会优先调用重写的方法。

        子类想调用父类的构造函数也可以,需要用super方法说明,如下所示:

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

        代码:

class Son(Parent):
    def __init__(self):
        print("子类构造函数")
        super(Son,self).__init__(60, "tyuio")

    def fun(self):
        print("重写了父类的fun方法")

三、多继承

        写法如下

class DerivedClassName(Base1, Base2, Base3):
    
    .
    .
    .
    

       需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

关注
打赏
1652240117
查看更多评论
立即登录/注册

微信扫码登录

0.0752s