栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

继承--python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

继承--python

继承

继承的概念:子类将包含父类所有的属性和方法

class People(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def speak(self):
        print("你好")
class Men(People):
    def __init__(self,name,age,high):
        People.__init__(self,name,age)#调用父类属性
        self.high=high
    def jieshao(self):
        print(f"我的名字是{self.name}")
xiaoming=Men("小明",18,85)
xiaoming.speak()
xiaoming.jieshao()

结果为:
你好
我的名字是小明

如果子类调用父类的私有属性或方法就会报错
如果子类想用父类的私有属性或方法,必须 一个下划线+父类名+俩个下划线+私有属性或方法

class People(object):
    def __init__(self,name,age):
        self.__name=name
        self.age=age
    def speak(self):
        print("你好")
class Men(People):
    def __init__(self,name,age,high):
        People.__init__(self,name,age)#调用父类属性
        self.high=high

xiaoming=Men("小明",18,85)
xiaoming.speak()
print(xiaoming._People__name)

类成员的继承和重写
成员继承:子类继承父类除构造方法之外的成员
重写:子类可以重新定义父类中的方法,从而覆盖父类的方法

class People(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def speak(self):
        print("你好")
class Men(People):
    def __init__(self,name,age,high):
        People.__init__(self,name,age)#调用父类属性
        self.high=high
    def speak(self):
        print(f"我的名字是{self.name}我的身高是{self.high}")
xiaoming=Men("小明",18,85)
xiaoming.speak()

结果为:
我的名字是小明我的身高是85

通过类方法mro()或者类的属性下划线+mro+下划线输出这个类的继承结构

class a():
    pass
class b(a):
    pass
class C(b):
    pass
print(C.mro())

结果为:
[, , , ]

内置函数dir()可以查看内置函数
class People(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def speak(self):
        print("你好")
class Men(People):
    def __init__(self,name,age,high):
        People.__init__(self,name,age)#调用父类属性
        self.high=high
    def speak(self):
        print(f"我的名字是{self.name}我的身高是{self.high}")
print(dir(Men))# 内置函数dir()可以查看内置函数

python可以多继承,即有多个父类,如果俩个父类具有相同的方法名,在子类没有指定父类时,从左到右按顺序搜索

在子类中如果想获取父类方法时,可以用super()
class Dog(object):
    def __init__(self,name,shengying):
        self.name=name
        self.shengying=shengying
    def jiao(self):
        print("汪汪汪")
class xiaotianquan(Dog):
    def __init__(self,name,shengying):
        super().__init__(name,shengying)
    def xxx(self):
        print("okokok")
a=xiaotianquan("aaa","汪汪汪")
a.jiao()

结果为:汪汪汪

class Dog(object):
    def __init__(self,name,shengying):
        self.name=name
        self.shengying=shengying
    def jiao(self):
        print("汪汪汪")
class xiaotianquan(Dog):
    def __init__(self,name,shengying):
        super().__init__(name,shengying)
    def jiao(self):
        print("okokok")
a=xiaotianquan("aaa","汪汪汪")
a.jiao()

结果为okokok
如果在子类定义了和父类一样名称的方法,则子类覆盖父类

class Dog(object):
    def __init__(self,name,shengying):
        self.name=name
        self.shengying=shengying
    def jiao(self):
        print("汪汪汪")
class xiaotianquan(Dog):
    def __init__(self,name,shengying):
        super().__init__(name,shengying)
    def jiao(self):
        print("okokok")
        super().jiao()
a=xiaotianquan("aaa","汪汪汪")
a.jiao()

结果为:
okokok
汪汪汪

super().方法 表示父类的方法

私有属性和私有方法不能被外界和子类调用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/324342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号