推荐使用的派生方法:super().__init__()
"""
推荐使用的派生方法:super().__init__()
--super()的属性查找顺序是从当前位置开始找,根据mro列表,当前没有就往上找。
super() 函数是用于调用父类的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,
但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
--super(),会得到一个特殊的对象,该对象就是专门用来
访问父类中的属性的(严格按照继承的关系)
--super().__init__(),此处__init__(),
括号中不需要传值self。
--在Python2中,super()的完整用法是super(自己类名,self),
在Python2中需要写完整,而Python3中可以简写为super()。
"""
class OldboyPeople:
school='oldboy'
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
class OldboyStudent(OldboyPeople):
def __init__(self,name,age,sex,stu_id):
super().__init__(name,age,sex)
self.stu_id=stu_id
def choose_course(self):
print('%s is choosing course'%self.name)
# return 'true'
#函数自带返回值none,如果把return 'true'这一行注释的话,
# 那么打印的print(stu1.choose_course())这个结果就会是:tank is choosing course
# 并且还会打印出有None。
stu1=OldboyStudent('tank',19,'male',1)
print(stu1.__dict__)
print(stu1.choose_course())
上述程序输出的打印结果如下所示:
{'name': 'tank', 'age': 19, 'sex': 'male', 'stu_id': 1}
tank is choosing course
None
推荐使用的派生方法:super().__init__()的更多相关文章
- 在子类中调用父类的方法super
1.没有super之前,在子类里面需要父类里面的逻辑,但是我们是通过派生(自己定义了一个init,增加了一条line) class vehichle:#定义一个交通工具的类 Country=" ...
- 4-13 object类,继承和派生( super) ,钻石继承方法
1,object 类 object class A: ''' 这是一个类 ''' pass a = A() print(A.__dict__) # 双下方法 魔术方法 创建一个空对象 调用init方法 ...
- super().__init__()方法
class first(object): def __init__(self,age,name): self.age = age self.name = name class second(first ...
- Python中类方法、__new__方法和__init__方法解析
在编程语言中创建一个类,有构造方法这样的一个术语.而在Python中,通常大家都认为__init__是构造方法,其实并不完全等同.在构建类中,有一个特殊的方法__new__,这个才能等同为构造方法. ...
- python3 super().__init__()
父类不会自动调用__init__方法 class A: def __init__(self): A = 'A' self.a = 'a' print('init A') class B(A): def ...
- python3 super().__init__() 和 __init__() 的区别
1.单继承 super().__int__()和 Base.__init__(self)是一样的, super()避免了基类的显式调用. class Base(object): def __init_ ...
- python中super().__init__和类名.__init__的区别
super().__init__相对于类名.__init__,在单继承上用法基本无差 但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次 多继承时 ...
- 论super().__init__()的用法
当我们调用 super() 的时候,实际上是实例化了一个 super 类. super 是个类,既不是关键字也不是函数等其他数据结构,该对象就是专门用来访问父类中的属性的(严格按照继承的关系). -- ...
- Python中的super().__init__()
Python里的super().init()有什么用? 简单的说super().__init__(),就是继承父类的init方法,同样可以使用super()去继承其他方法. 下面是三种不同的继承.调用 ...
随机推荐
- 记一次Pod中java进程内存“异常”消耗
背景 环境:openshift3.11 开发反映部署在容器中的java应用内存持续增长,只升不降,具体为: java应用部署在容器中,配置的jvm参数为-Xms1024m -Xmx1024m,容器me ...
- Python中lambda的使用,与它的三个好基友介绍!
匿名函数lambda 除了def语句,python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具类似,所以称为lambda. 就像def一样,这个表达式创建了一个之后能够调用的 ...
- LMS自适应天线阵列设计 MATLAB
在自适应天线课上刚刚学了LMS自适应阵,先出一个抢先版贴一下结果,抢先某个小朋友一步. 关于LMS的具体介绍,直接看wiki里的吧,解释的比书上简明:传送门:https://en.wikipedia. ...
- Python3学习-基础
1.直接运行.py文件 在Windows上是不行的,但是在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释: #!/usr/bin/env python3 print('he ...
- 你真的了解Object源码吗
欢迎点赞阅读,一同学习交流,有疑问请留言 . GitHub上也有开源 JavaHouse 欢迎star 引入 Object 应该是比较简单的源码了.现在我们来分析一下他.Object 是类层次结构的根 ...
- .NET Core应用框架AA介绍(二)
AA的开源地址 https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架,是建立在众多大家熟知的流行工具之上并与之集成.比如:ASP.NET Core ...
- NIO-概览
目录 NIO-概览 目录 前言 什么是NIO 通道 缓冲区 选择器 其他 管道 FileLock 参考文档 NIO-概览 目录 NIO-概览 前言 本来是想学习Netty的,但是Netty是一个NIO ...
- java 运算符&表达式
1. java中,模运算符%可以获取整数除法的余数,同样适用于浮点类型数据.double y = 23.56; y%5;(即y mod 5 =3.56) [c/c++中,要求%两侧均为整数数据.] 2 ...
- 使用Feign访问接口
添加主要依赖 使用Feign访问接口的配置,如果服务不在Eureka上,可以不加Eureka的依赖,用在FeignClient上指定url的方式访问 dependencies { compile(' ...
- Hibernate注解之@Enumerated:针对枚举enum(转)
https://my.oschina.net/xinxingegeya/blog/359968 @Column(name = "store_type", nullable = fa ...