第十三讲目录

  • 1. property装饰器
  • 2. 继承简介
  • 3. 方法重写
  • 4. super()
  • 5. 多重继承
  • 6. 多态
  • 7. 属性和方法

1. property装饰器

  • 我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改
  • 案例
class Person():def __init__(self, name):self._name = name# getter方法@propertydef name(self):print('get方法执行了')return self._name#setter方法@name.setterdef name(self, name):self._name = namep = Person('默默')
print(p.name)
p.name = '旺仔'
print(p.name)
  • 运行结果

2. 继承简介

  • 继承是面向对象三大特性之一
  • 通过继承我们可以使一个类获取到其他类中的属性和方法
  • 在定义类时,可以在类名后面的括号中指定当前类的父类(超类、基类)
  • 继承提高了类的复用性。让类与类之间产生了关系。有了这个关系,才有了多态的特性
  • 案例
class Animal(object):def sleep(self):print('动物会睡觉')def run(self):print('动物会跑')class Dog(Animal):  # 括号里的类就是当前类的父类(超类,基类)def run(self):print('狗会跑')dog = Dog()
dog.run()# issubclass 检测一个类是否是一个类的父类
print(issubclass(Dog, Animal))
print(issubclass(Dog, object))# 任何类的最大的父类就是object类
print(issubclass(Animal, object))
  • 运行结果

3. 方法重写

  • 如果在子类中有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特点我们称之为方法的重写(覆盖)
  • 当我们调用一个对象的方法时:
    • 会优先去当前对象中寻找是否具有该方法,如果有则直接调用
    • 如果没有,则去当前对象的父类中寻找,如果父类中有则直接调用父类中的方法
    • 如果没有,则去父类中的父类寻找,以此类推,直到找到object,如果依然没有找到就报错了

4. super()

  • super()可以获取当前类的父类
  • 并且通过super()返回对象调用父类方法时,不需要传递self

5. 多重继承

  • 在Python中是支持多重继承的。也就是我们可以为一个类同时制定多个父类
  • 可以在类名的()后边添加多个类,来实现多重继承
  • 多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法
  • 在开发中没有特殊情况,应该尽量避免使用多重继承。因为多重继承会让我们的代码更加复杂
  • 如果多个父类中有同名的方法,则会先在第一个父类中寻找,然后找第二个,找第三个…前面会覆盖后面的
  • 案例
class A(object):def text(self):print('A')class B(object):def text(self):print('B')def text2(self):print('text2')class C(A, B):passc = C()
c.text()
c.text2()print(C.__bases__)
  • 运行结果

6. 多态

  • 多态是面向对象的三大特性之一。从字面理解就是多种形态
  • 一个对象可以以不同形态去呈现
  • 面向对象三大特性
    • 封装 确保对象中数据的安全
    • 继承 保证了对象的扩展性
    • 多态 保证了程序的灵活性
  • Python中多态的特点
    • 1、只关心对象的实例方法是否同名,不关心对象所属的类型;
    • 2、对象所属的类之间,继承关系可有可无;
    • 3、多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;
    • 4、多态是调用方法的技巧,不会影响到类的内部设计。
class A(object):def __init__(self, name):self._name = name@propertydef name(self):return self._name@name.setterdef name(self, name):self._name = nameclass B(object):def __init__(self, name):self._name = name@propertydef name(self):return self._name@name.setterdef name(self, name):self._name = namea = A('默默')
b = B('黄浩')def speak(obj):print('好好复习呀 % s' % obj.name)speak(a)
speak(b)
  • 运行结果

7. 属性和方法

  • 属性

    • 类属性,直接在类中定义的属性是类属性
    • 类属性可以通过类或类的实例访问到。但是类属性只能通过类对象来修改,无法通过实例对象修改
    • 实例属性 通过实例对象添加的属性属于实例属性
    • 实例属性只能通过实例对象来访问和修改,类对象无法访问修改
  • 方法
    • 在类中定义,以self为第一个参数的方法都是实例方法
    • 实例方法在调用时,Python会将调用对象以self传入
    • 实例方法可以通过类实例和类去调用
    • 当通过实例调用时,会自动将当前调用对象作为self传入
    • 当通过类调用时,不会自动传递self,我们必须手动传递self
    • 类方法 在类的内容以@classmethod 来修饰的方法属性类方法
    • 类方法第一个参数是cls 也会自动被传递。cls就是当前的类对象
    • 类方法和实例方法的区别,实例方法的第一个参数是self,类方法的第一个参数是cls
    • 类方法可以通过类去调用,也可以通过实例调用
  • 静态方法
    • 在类中用@staticmethod来修饰的方法属于静态方法
    • 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例调用
    • 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
    • 静态方法一般都是些工具方法,和当前类无关
  • 案例
class A(object):# 类属性 直接定义在类中的属性# 类属性可以通过类和该类的实例来访问# 类属性只能通过类对象(A)来修改,无法通过实例对象来修改# num = 0def __init__(self, num):self.num = numdef text(self):print('text实例方法')@classmethoddef text1(cls):print('这是text1类方法')@staticmethoddef text2():print('这是text2静态方法')a = A(10)
# 实例属性 只能通过实例对象访问,无法通过类对象来访问
# 实例属性的创建:通过实例对象点上属性名来创建  a.num = 10print(a.num)# 实例方法
a.text()
A.text(a)# 类方法
# 类方法可以通过类对象调用也可以通过实例对象调用
# cls是第一个参数,也是当前的类对象
a.text1()
A.text1()# 总结:类当中所拥有的的一切,实例对象都是可以使用的# 静态方法  在类中用@staticmethod装饰的就是静态方法
# 静态方法和这个类没有关系,不需要指定任何参数,实例对象和类对象都是可以直接调用静态方法,静态方法就相当于一个功能函数,只是存放在了类中而已
a.text2()
A.text2()
  • 运行结果

第十三讲 面向对象(下)——Seasons in the sun相关推荐

  1. Java学习系列(十)Java面向对象之I/O流(上)

    IO流 我们知道应用程序运行时数据是保存在内存中的,但由于内存中的数据不可持久保存(如断电或程序退出时数据会丢失),因此需要一种手段将数据写入硬盘或读入内存.面向IO流编程就是一种很好的选择.IO:I ...

  2. 第十篇 面向对象的程序设计

    第十篇 面向对象的程序设计 阅读目录 一 面向对象的程序设计的由来 二 什么是面向对象的程序设计及为什么要有它 三 类和对象 3.1 什么是对象,什么是类 3.2 类相关知识 3.3 对象相关知识 3 ...

  3. 开环直流电机的机械特性_第二十三讲 20直流PWM变换器-电动机系统及开环调速系统机械特性.ppt...

    第二十三讲 20直流PWM变换器-电动机系统及开环调速系统机械特性 谢谢! 本讲结束 * * 电力传动控制系统 上海开放大学 * 第二十三讲 直流PWM变换器-电动机系统及开环调速系统机械特性 * 不 ...

  4. 视觉 SLAM 十四讲 —— 第十三讲 建图

    视觉 SLAM 十四讲 -- 第十三讲 建图 在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用 SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...

  5. 第五十三讲 获取设备树属性

    第五十三讲 获取设备树属性 文章目录 第五十三讲 获取设备树属性 一.获取设备树属性信息 1.查看属性所在节点 device_node 结构体 2.如何查找结点 节点路径 节点类型(不推荐使用) 节点 ...

  6. 织梦仿站系列教程第二十三讲——列表页制作(二)

    织梦后台提示用户名不存在 查看数据库用户名被改为spider 织梦仿站系列教程第二十三讲--列表页制作(二) 这一讲,我们讲下列表页的分页代码,先找到如下代码: 865 1 href="ht ...

  7. 20165204 第十周课下作业补做

    20165204 第十周课下测试补做 课上测试内容补做 测试2 针对下面的Student类,使用Comparator编程完成以下功能: 在测试类StudentTest中新建学生列表,包括自己和学号前后 ...

  8. 趣谈网络协议笔记-二(第十三讲)

    趣谈网络协议笔记-二(第十三讲) 套接字Socket:Talk is cheap, show me the code 前言 这只是笔记,是为了整理刘超大神的极客时间专栏的只是而存在的! 经常会在网络上 ...

  9. 20165301第十周课下补做

    第十周课下补做 知识点总结 创建一个空的链表 List<Student> list = new LinkedList<Student>(); 向链表中添加新的结点 list.a ...

最新文章

  1. 福布斯:混合现实未来的八大应用场景
  2. AI造假 vs AI打假 终结“猫鼠游戏”不能只靠技术
  3. 目标检测 RCNN算法详解
  4. awk 内嵌正则 提取字符串_干货-Shell编程文本处理三剑客之-awk
  5. harmonyos2.0如何申请,华为鸿蒙HarmonyOS2.0手机开发者Beta版公测申请地址方法_专题_53货源网...
  6. JPA 系列教程3-单向多对一
  7. DAVINCI开发原理之三----达芬奇编解码引擎Codec Engine(CE)
  8. (二十七)【2021 WWW】Learning Intents behind Interactions with Knowledge Graph for Recommendation
  9. linux 下的sar工具命令小结
  10. Ubuntu 修改主机名
  11. 苹果蓝牙连接不上是什么原因_为什么无线鼠标几乎都不用蓝牙连接呢?延迟、回报率是硬伤...
  12. 最常用的GitHub—— Android 开源项目整理(精品)
  13. 电力行业安全建设方案
  14. SDOI2015寻宝游戏
  15. 如何绘画Q版古风人物,超简单超实用,一学就会!
  16. c语言如何编写对数程序,在C语言中使用对数函数的方法
  17. Poco脚本的点击位置与点击偏移
  18. 屏幕尺寸、分辨率、视口笔记
  19. mysql 字段中有括号的查询方法
  20. HAL库实践记录之串口接收不定长数据

热门文章

  1. 驰骋BPM系统-表单引擎-流程引擎2020年大换装
  2. 定时器中断控制LED闪烁(每隔1s)---普中科技开发仪
  3. 后台缓存收回进程无法释放上下文[/BUSINESS的缓存的[10]%-请考虑增加缓存的最大大小
  4. 互联网晚报 | 12月20日 星期一 | 安踏100亿成立“和敏基金会”;阿里公布碳中和目标;京东上线数字藏品交易平台...
  5. SAP成都研究院的体育故事
  6. 放大招了,肝了一篇8万字的Java8新特性总结,赶快收藏
  7. string类型--字符串常用取值操作
  8. 分省市县地理空间矩阵:地级市空间、地理距离矩阵等多指标数据集
  9. 阿里大促,「技术负责人」如何做技术保障?
  10. 入门PCB设计-DY工作室