super()方法

子类和父类有相同的方法,如果子类想调用父类的方法,可以使用super()方法

在python3中,子类执行父类的方法也可以直接用super方法 —》super()

super默认省略了两个参数,第一个参数是当前类名,第二个参数是self

两个参数可以省略不传递例如 super(Student,self) super()还可以从类的外部使用,需要传递类名(本类的名称)和对象名

例如 super(Student,student)格式:父类类名.方法名称(self)或者super().方法名称()或者super(本类类名,对象名)

class Dog:def bite(self):print("汪汪叫")class Hsq(Dog):def bite(self):# Dog.bite(self)# super().bite()super(Hsq,self).bite()print("狂吼")hsq = Hsq()
hsq.bite()
Dog.bite(Dog)# 汪汪叫
# 狂吼
# 汪汪叫

__init__()方法

  • 子类继承父类,如果子类不复写父类的__init__()方法,常见子类对象的时候会自动调用父类__init__()方法。
  • 子类继承父类,如果子类复写了父类的__init__()方法,创建的子类对象的时候不会再调用父类的__init__()方法。
  • 注意:python要求复写父类的__init__()方法时,需要调用父类的__init__()因为存在隐患
    例如父类的初始化方法有参数,子类初始化无参数,子类再调用父类的参数的时候就会报错

1.子类里没有__init__()方法,会调用父类的,有会调用自己的
2.调用父类的初始化方法,先执行父类的,再执行子类的
3.调用父类的初始化方法,如果父类方法中有参数,必须传递相应的参数,否则会报错

class Person:def __init__(self):print("---person--")class Student(Person):def __init__(self):print("--student--")stu = Student()class Person:def __init__(self,name,age):self.name = nameself.age = ageprint("---person--")class Student(Person):passdef __init__(self,name,age,weight):super(Student,self).__init__(name,age)self.weight = weightprint("--student--")stu = Student('xiaoming',18,1)# --student--
# ---person--
# --student--

派生属性

属性的覆盖(派生属性):子类也可以添加自己新的属性或者在自己这里重新定义 这些属性(不会影响到父类)
需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己的为准了(属性的覆盖)

class Person:num =10def __init__(self,name,age,weight):self.name = nameself.age = ageself.weight = weightclass Student(Person):num = 20def __init__(self,name,age,weight):super(Student,self).__init__(name,age,weight)print(self.weight)def introduce(self):print(self.num)print(Person.num)print(super(Student,self).num)def __str__(self):return "我叫{},今年{}岁,体重{}公斤".format(self.name,self.age,self.weight)stu = Student('xiaoming',18,1)
stu.introduce()
print(stu)# 111
# 20
# 10
# 10
# 我叫xiaoming,今年18岁,体重1公斤

私有属性

私有方法在继承中的表现
父类中的私有方法和私有属性都是不能被子类继承下来的。
练习:测试父类中的私有属性和私有方法是否能被继承下来

class Father:def __init__(self,__name,age):self.__name = __nameself.age = agedef __call_name(self):print("我今年{}".format(self.age))class Son(Father):def __init__(self,__name,age):super(Son,self).__init__(__name,age)def call_name(self):super(Son, self).__call_name()son = Son('john',25)
son.call_name()#AttributeError: 'super' object has no attribute '_Son__call_name'
class A:__num = 10def __test1(self):print("test1")def test2(self):print("test2")
class B(A):def test3(self):print('test--B')# print(A.__num)self.test2()# self.__test1()# super(B,self).__test1()
b=  B()
b.test3()# test--B
# test2

Python类:super相关推荐

  1. 【转】python类中super()和__init__()的区别

    [转]python类中super()和__init__()的区别 单继承时super()和__init__()实现的功能是类似的 class Base(object):def __init__(sel ...

  2. python类初始化详解_python类中super() 的使用解析

    描述 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复 ...

  3. python 类-Python中的类

    Python和Java都是面向对象的语言,对象从类中获取,类指的是同一类具有相同特征的事物,比如拉布拉多,柯基,哈士奇,它们都是狗,具有狗的相同特征,所以可以被归为一类Dog,Python中类的使用与 ...

  4. python之父去面试-Python面试题之Python的Super方法

    当我第一次见到这个super()的时候,我想说,这是啥啊?为什么Python的super看起来这么奇怪呢? super直接指向父类的实例不就得了么?为什么非得搞两个参数? 而且第一个参数还是自己的类名 ...

  5. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解

    我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...

  6. python常用知识点总结-python 类知识点总结

    python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...

  7. python类中方法的执行顺序-浅谈Python的方法解析顺序(MRO)

    方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...

  8. python类高级用法_十.python面向对象高级用法

    1.反射 1.1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的 ...

  9. Python类的自定义属性访问及动态属性设置

    本文主要介绍python类的一些自定义属性访问的方法,以及类的动态属性设置即python的内置函数setattr(). 自定义属性访问 ​ 什么是属性?下面的例子a和b是属性吗?不是,他们是全局变量, ...

  10. Python的Super方法

    我们最常见的,可以说几乎唯一能见到的使用super的形式是: class SubClass(BaseClass):def method(self):super(SubClass, self).meth ...

最新文章

  1. 闪电网络真的是比特币最好的扩容解决方案吗?
  2. mysql选定数据库_mysql数据库学习――2,数据库的选定,创建,删除和变更_MySQL...
  3. accept系统调用内核实现
  4. 对oracle静态参数修改一点研究
  5. boost::hana::alignof_用法的测试程序
  6. Java中头指针和头结点_. 2 . 【严题集 2.1① 描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。...
  7. MSN8.0经常出现连接错误,如何解决?
  8. sql查询初学者指南_适用于初学者SQL Server查询优化技巧与实际示例
  9. java实现for文件删除_Java 添加、删除、替换、格式化Word中的文本的步骤详解(基于Spire.Cloud.SDK for Java)...
  10. 团队作业4——beta阶段冲刺4
  11. 1.4.2.PHP5.6 狐教程-环境(Mac下 PHP开发环境 配置及安装 php5.6.x nginx mysql)
  12. java 求集合平均数_n个数的几何平均数小于等于它的算术平均数,详细证明过程...
  13. 笔记本计算机没反应怎么办,笔记本电脑开机黑屏没反应怎么办?
  14. Java生成随机整数
  15. React+Antd+TypeScript 开发规范
  16. Tomcat服务器安装和替换阿里云免费ssl证书步骤(超详细)
  17. JAVA JNI调用科大讯飞离线语音合成(Linux篇)
  18. python常用模块time模块
  19. MobaXterm 详细安装使用教程 官网
  20. 翼方健数CEO罗震——推动区域级数据互联互通的先行者

热门文章

  1. python怎么弄成白色背景_python – 在matplotlib中为colorbar添加白色背景
  2. No tracked branch configured for branch dev-rongtong or the branch doesn‘t exist.
  3. 深入学习VMware vSphere---基础知识
  4. VSCODE 简单配置用户代码片段
  5. python字符串前加字母u或者r区
  6. 观景台售票情况数据分析【Python】
  7. info在python中的意思_为什么我没有在python中收到日志INFO消息?
  8. 【Developer Log】ProGuard扰码web项目(WAR)
  9. 关于养老保险你不得不了解的事儿
  10. 关于四川华图省考面试 1:1职位保护的承诺函