python子类与父类属性重名_9.6.子类调用父类同名属性和方法
# 子类调用父类同名属性和方法
~~~
class Master(object):
def __init__(self):
self.kongfu = "古法烤冷面配方" # 实例变量,属性
def make_cake(self): # 实例方法,方法
print("[古法] 按照 制作了一份烤冷面...".format(self.kongfu))
class School(object):
def __init__(self):
self.kongfu = "现代烤冷面配方"
def make_cake(self):
print("[现代] 按照 制作了一份烤冷面...".format(self.kongfu))
class Prentice(School, Master): # 多继承,继承了多个父类
def __init__(self):
self.kongfu = "夏氏烤冷面配方"
def make_cake(self):
print("执行子类的__init__方法前,self.kongfu属性:%s" % self.kongfu)
self.__init__() # 执行本类的__init__方法,做属性初始化 self.kongfu = "夏氏...."
print("执行子类的__init__方法前,self.kongfu属性:%s" % self.kongfu)
print("[夏氏] 按照 制作了一份烤冷面...".format(self.kongfu))
# 调用父类方法格式:父类类名.父类方法(self)
def make_old_cake(self):
# 不推荐这样访问父类的实例属性,相当于创建了一个新的父类对象
# print("直接调用Master类的kongfu属性:%s" % Master().kongfu)
# 可以通过执行Master类的__init__方法,来修改self的属性值
print("执行Master类的__init__方法前,self.kongfu属性:%s" % self.kongfu)
Master.__init__(self) # 调用了父类Master的__init__方法 self.kongfu = "古法...."
print("执行Master类的__init__方法后,self.kongfu属性:%s" % self.kongfu)
Master.make_cake(self) # 调用父类Master的实例方法
def make_new_cake(self):
# 不推荐这样访问类的实例属性,相当于创建了一个新的父类对象
# print("直接调用School类的kongfu属性:%s" % School().kongfu)
# 可以通过执行School类的__init__方法,来修改self的属性值
print("执行School类的__init__方法前,self.kongfu属性:%s" % self.kongfu)
School.__init__(self) # 调用了父类School的__init__方法 self.kongfu = "现代...."
print("执行School类的__init__方法后,self.kongfu属性:%s" % self.kongfu)
School.make_cake(self) # 调用父类School的实例方法
# 实例化对象,自动执行子类的__init__方法
laoxia = Prentice()
laoxia.make_cake() # 调用子类的方法(默认重写了父类的同名方法)
print("--" * 10)
laoxia.make_old_cake() # 进入实例方法去调用父类Master的方法
print("--" * 10)
laoxia.make_new_cake() # 进入实例方法去调用父类School的方法
print("--" * 10)
laoxia.make_cake() # 调用本类的实例方法
~~~
执行结果:
~~~
执行子类的__init__方法前,self.kongfu属性:夏氏烤冷面配方
执行子类的__init__方法前,self.kongfu属性:夏氏烤冷面配方
[夏氏] 按照 制作了一份烤冷面...
--------------------
执行Master类的__init__方法前,self.kongfu属性:夏氏烤冷面配方
执行Master类的__init__方法后,self.kongfu属性:古法烤冷面配方
[古法] 按照 制作了一份烤冷面...
--------------------
执行School类的__init__方法前,self.kongfu属性:古法烤冷面配方
执行School类的__init__方法后,self.kongfu属性:现代烤冷面配方
[现代] 按照 制作了一份烤冷面...
--------------------
执行子类的__init__方法前,self.kongfu属性:现代烤冷面配方
执行子类的__init__方法前,self.kongfu属性:夏氏烤冷面配方
[夏氏] 按照 制作了一份烤冷面...
~~~
#### 核心点:
> 无论何时何地,self都表示是子类的对象。在调用父类方法时,通过传递self参数,来控制方法和属性的访问修改。
#### 剧情发展:
> 老夏的烤冷面店非常红火,终于有一天,他成了世界首富!!
>
> 但是他也老了,所以他希望把 师傅的配方 和 学校的配方 以及自己的配方 继续传承下去...(多层继承)
python子类与父类属性重名_9.6.子类调用父类同名属性和方法相关推荐
- 实例对象的属性和原型对象中的属性重名问题 神奇的原型链 继承 继承案例
实例对象的属性和原型对象中的属性重名问题 <!DOCTYPE html> <html lang="en"> <head><meta cha ...
- 为什么通常在类的init函数下一行写super().__init__()?==>就是执行父类的构造函数,使得我们能够调用父类的属性
我们通常看到 那么这一行代码的意义是什么呢? 实例: class Root(object):def __init__(self):self.x = '这是属性'def fun(self):print( ...
- python实现父类继承_Python多继承用super调用父类方法?
python的super传递:python多重继承的super调用父类的兄弟类 - 30天尝试新事情30daydo.com 如果要调用父类的父类,可以直接用类名(类名需要在mro里面) # 多重继承 ...
- Json解析不允许子类父类变量重名的原因
之前项目中遇到过当Json遇到子类和父类有同样的变量的时候会直接报错,类似这样. Caused by: java.lang.IllegalArgumentException: class com.bj ...
- Python OOP:继承、单继承、多继承、__mro__、子类重写父类同名属性和方法、子类调用父类同名属性和方法、多层继承、super()、私有(实例)属性和方法、获取修改私有属性值、私有类属性
一.继承 Python⾯向对象的继承指的是多个类之间的所属关系,即⼦类默认继承⽗类的所有属性和⽅法. 继承作用:继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 在P ...
- 决战Python之巅(十五)-面向对象(找名词、加属性、连关系)
面向对象(找名词.加属性.连关系) 知识回顾 引言 面向过程 VS 面向对象 面向过程 面向对象 面向对象初识 类的相关 对象的相关 对象之间的交互 类命名空间与对象.实例的命名空间 初识面向对象小结 ...
- 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
文章目录 I . 子类调用父类总结 II . 子类调用父类方法 ( super ) III . 子类内部类调用父类方法 ( super@ ) IV . 子类选择调用不同的 父类 / 接口方法 ( su ...
- Python_子类调用父类的方法
1.方式一 子类调用父类的方法,包含2中形式的调用.一种形式是在类内部通过继承的方式调用父类的方法,另外一种形式是子类实例化后之后通过继承的方式来调用父类的方法.如下图所示: 注意一点,在子类内部通过 ...
- qt 子类调用父类的函数_子类调用父类方法
当有相同的属性或者方法是this子类表示调用自己的属性或者方法, super调用父类的属性或者方法. 当子类调用的属性方法在子类中不存在时,那么this和super都是调用父类的属性或者方法 1.方式 ...
最新文章
- sqlite3 解决并发读写冲突的问题
- SAP手工传输TP使用方法
- JavaScript实现sieveOfEratosthenes埃拉托色尼筛选法算法(附完整源码)
- 安装windows时loading files结束就重启_Boot Camp安装windows 10
- 安卓应用用户数据_Android手机用户注意,你要知道的中国十大安卓应用商店
- Java多线程 ——线程基础和锁锁锁
- macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了!
- 怎么让拿到的字符串类型的值去掉双引号显示_python入门系列:Python数据类型
- 软件需求分析课堂讨论一
- 2020软件测试报告模板
- 今日做题家 - 面试算法题教程系列总纲
- QChart修改标题颜色,修改X轴Y轴字体颜色
- 从双钻模型看产品规划
- Qt蓝牙:QBluetoothDeviceInfo、QBluetoothAddress
- 微信t服务器地址,微信地址怎么改?教你如何修改微信地址
- python中redis incr的使用
- cesium中实现鼠标拖动实体功能
- 读《半生烟雨,半世落花:李清照传》小感
- python爬虫---爬取优信二手车
- 形态学在图像处理中的应用