Python | 继承

Python | 继承python 面向对象的继承指的是多个类之间的所属关系 即子类默认继承父类的所有属性的方法 具体如下 在 python 中 所有类默认继承 object 类 object 类是顶级类或基类

大家好,欢迎来到IT知识分享网。

继承的概念

生活中的继承,一般指的是子女继承父辈的财产。

  • 拓展1:经典类或旧式类
class 类名: 代码 ......
  • 拓展2:新式类
class 类名(object): 代码

python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性的方法,具体如下:

class A(object): def __init__(self): self.num = 1 def info_print(self): print(self.num) class B(A): pass result = B() result.info_print()

在python中,所有类默认继承object类,object类是顶级类或基类;其他子类叫做派生类。

单继承

故事主线:一个煎饼果子老师傅,在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼果子的技术。师父要把这套技术传授给他的唯一的最得意的徒弟。

分析:徒弟是不是要继承师父的所有技术?

class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class Prentice(Master): pass jack = Prentice() print(jack.kongfu) jack.make_cake()

多继承

故事推进:jack是个爱学习的好孩子,想学习更多的煎饼果子技术,于是,在百度找到了一个培训班,报班学习煎饼果子技术。

所谓多继承意思就是一个类同时继承多个父类

class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(object): def __init__(self): self.kongfu = '[清华煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class Prentice(School, Master): pass jack = Prentice() print(jack.kongfu) jack.make_cake()

当一个类有多个父类的时候,默认使用第一个父类的同名属性和方法。

子类重写父类同名方法和属性

故事:jack掌握了师父和培训技术后,自己潜心钻研出自己的独门配方。

...... class Prentice(School, Master): def __init__(self): self.kongfu = '[独门秘籍]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') jack = Prentice() print(jack.kongfu) jack.make_cake()

__mro__

查看某个类的继承关系

print(Prentice.__mro__)

子类调用父类的同名方法和属性

故事:很多顾客都希望能吃到百度技术的煎饼果子

...... class Prentice(School, Master): def __init__(self): self.kongfu = '[独门秘籍]' def make_cake(self): # 如果是先调用了父类的属性和方法,父类属性会覆盖子类属性,故在调用属性前, # 先调用自己子类的初始化 self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 调用父类方法,但是为保证调用到的也是父类的属性,必须在调用方法前调用父类的初始化 def make_master_cake(self): Master.__init__(self) Master.make_cake(self) def make_school_cake(self): School.__init__(self) School.make_cake(self) jack = Prentice() jack.make_cake() jack.make_master_cake() jack.make_school_cake()

多层继承

故事:N年后,jack老了,想要把所有技术传承给自己的徒弟。

...... # 徒孙类 class Tusun(Prentice): pass xiaoqiu = Tusun() xiaoqiu.make_cake() xiaoqiu.make_master_cake() xiaoqiu.make_school_cake()

super()调用父类方法

...... # 一次性调用父类School Master的方法 def make_old_cake(self): # 方法一:如果定义的类名修改,这里也要修改,麻烦;冗余代码量庞大 # School.__init__(self) # School.make_cake(self) # Master.__init__(self) # Master.make_cake(self) # 方法二: # 2.1 super(当前类型, self).函数() # super(Prentice, self).__init__() # super(Prentice, self).make_cake() # 2.2 无参数super super().__init__() super().make_cake() jack = Prentice() jack.make_old_cake()

使用super()可以自动查找父类。调用顺序遵循__mro__类属性的顺序。比较适合单继承使用

私有权限

定义私有属性和方法

在python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或实例方法不继承给子类。

故事:jack把技术传承给徒弟的同时,不想把自己的钱继承给徒弟,这个时候就要为钱这个实例属性设置私有权限。

设置私有权限的方法:在属性名和方法名前面加上两个下划线_。

class Prentice(School, Master): def __init__(self): self.kongfu = '[独门秘籍]' # 私有属性 self.__money =  # 私有方法 def __info_print(self): print('这是私有方法') print(self.__money)

获取和修改私有属性

在python中,一般定义函数名get_xx来获取私有属性,定义set_xx来修改私有属性

...... class Prentice(School, Master): def __init__(self): self.kongfu = '[独门秘籍]' # 私有属性 self.__money =  # 获取私有属性值 def get_money(self): return self.__money # 修改私有属性值 def set_money(self): self.__money = 100 xiaoqiu = Tusun() print(xiaoqiu.get_money()) # 20000 xiaoqiu.set_money() print(xiaoqiu.get_money()) # 100

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/159896.html

(0)
上一篇 2024-12-01 13:45
下一篇 2024-12-01 14:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信