三大特性

特性 内容
封装 确保对象中数据的安全
继承 保证了对象的可扩展性
多态 增加了对象的灵活性

1.封装

隐藏对象中不希望被外部访问到的属性、方法。
封装虽然增加了类定义的复杂度,但确保了类的安全。

使用方法

  • 将属性名设置一个较为复杂的内容。
  • 对属性名添加双下划线__。添加双下划线的属性称之为私有属性(私有属性不会被继承),添加双下划线的属性名在类内部访问可以直接通过(__属性名)来调用,但在外部无法直接通过(__属性名)来定义。

添加双下划线的属性名在外部名字被自动修改为(_类名_属性名)

class Prople:def __init__(self):self.__name = '寻觅'self.age = '20'def can(self):print('%s很能吃' % self.__name)
fan = Prople()
fan.__name = '大头'
fan.can() # 寻觅很能吃
  • 用getter方法和setter方法进行封装(这种方法增加了程序的复杂度,但符合OCP开闭原则)
    etter方法:可以让对象中的属性变为只读信息,获取对象的属性名。
    setter方法:用来开放对属性的修改权限。
class Prople:def __init__(self):self.__name = '寻觅'self.age = '20'def can(self):print('%s很能吃' % self.__name)# getter方法def get_name(self):return self.__name# setter方法def set_name(self, name):self.__name = name
fan = Prople()
data = fan.get_name()
fan.data = '大头'
print(data) # 寻觅
fan.set_name('大头')
fan.can() # 大头很能吃

getter于装饰器property,setter于装饰器 方法名.getter 常常会一起使用
property和getter装饰器可以让方法可以像属性一样调用

使用setter设置属性可以增加数据的验证确保属性的正确性。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Prople:__age = 20@propertydef age(self):print('我已经是一个%s岁的老人了' % self.__age)return self.__age@age.setterdef age(self, age):if age > 0:self.__age = age
a = Prople()
a.age = -21 # 我已经是一个20岁的老人了
a.age

2.继承

提高了代码的复用性,让类与类直接产生了关系,有了这个关系才产生了之后的多态。

使用方法

创建类时在类名后的括号内添加父类

class Prople:def __init__(self):self.__name = '寻觅'# getter方法def get_name(self):return self.__name
class man(Prople):def looks(self):print('%s长得帅' % self.get_name())
data = man()
data.looks()

验证父类的方法:issubclass(类名1,类名2),验证类名1是否为类名2的子类

super

super函数可以让子类获取到父类中的内容,在继承后添加init中默认变量会经常使用,如果不使用super函数,在子类中的init魔术方法会覆盖父类中的魔术方法。语法:super().init(属性名)

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Animal:def __init__(self, name):self.__name = namedef call(self):print(f'{self.__name}会叫', end='')
class Cat(Animal):def __init__(self, name, voice):super().__init__(name)self.__voice = voicedef voice(self):self.call()print(self.__voice)
garfield = Cat('加菲猫', 'Holle')
garfield.voice()

多重继承

在Python中允许多重继承,一个类可以设置多个父类,但在开发中并不建议使用多重继承,多重继承会让代码变得更复杂。

class Animal:def __init__(self, name):self.__name = namedef call(self):print(f'{self.__name}会叫', end='')@propertydef name(self):return self.__name@name.setterdef name(self, name):self.__name = nameclass Catamount():def looks(self):print('是有毛的,', end='')class Cat(Catamount, Animal):def __init__(self, name, voice):super().__init__(name)self.__voice = voicedef voice(self):print(self.name, end='')self.looks()self.call()print(self.__voice)garfield = Cat('加菲猫', 'Holle')
garfield.voice()

查看父类的方法:类名.__bases__

3.多态

一个对象可以已不同的形态呈现。多态的概念是应用于Java和C#这一类动态语言中,而Python崇尚"鸭子类型"。

动态语言中调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。它并不要求严格的继承体系,即“当看起来像鸭子,他就可以被当做鸭子”

我们举个例子:我们先设一个动物类和猫类,猫类继承动物类,然后将猫类进行实例化成加菲猫,橘猫,奶猫等不同的形态,而这些不同的形态就是多态。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Animal:def __init__(self, name):self.__name = namedef call(self):print(f'{self.__name}会叫', end='')
class Cat(Animal):def __init__(self, name, voice):super().__init__(name)self.__voice = voicedef voice(self):self.call()print(self.__voice)
garfield = Cat('加菲猫', 'Holle')
orangecat = Cat('橘猫', '请以大橘为重')
milkcat = Cat('奶猫', '喵喵喵')
garfield.voice()
orangecat.voice()
milkcat.voice()

所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。

Python面向对象的三大特性相关推荐

  1. Python - 面向对象编程 - 三大特性之继承

    继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...

  2. python面向对象三大特性_深入理解Python面向对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  3. Python面向对象编程三大特性之多态

    多态 code:_9polymorphism.py # ***************************************** """ 多态:对于同一个方法, ...

  4. Python面向对象编程三大特性之继承

    继承 继承 继承的语法 重写 扩展 引用 super().父类方法名 参数传递 code:_6Inheritance.py # ************************************ ...

  5. Python面向对象编程三大特性之封装

    封装 封装 封装的级别 获取对象的所有成员 code:_5packaging.py # ******************************************************** ...

  6. python——面向对象的三大特性:封装,继承,多态

    封装 封装为一个大类,类中包含属性和方法 将属性和方法封装到一个抽象的类中 外界使用类创建对象,然后让对象调用方法 对象方法的细节都封装在类的内部 例题: 需求 1.小明体重75.0公斤 2.小明每次 ...

  7. 面向对象之三大特性:继承,封装,多态

    python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...

  8. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...

    Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...

  9. python基础学习笔记13:面向对象的三大特性

    1.面向对象有哪些特性 面向对象的三大特性:封装性.继承性.多态性 2.Python中的封装 在Python代码中,封装有两层含义: 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 cl ...

最新文章

  1. ECHO.js 纯javascript轻量级延迟加载
  2. 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h )
  3. Java操作数据库Sqlite样例代码
  4. pdffactory字体打印不对_标准论文格式字体要求
  5. kaptchaCode(验证码)
  6. mysql 操作指令详解_Mysql常用命令详解
  7. 有规律字段拆分(2005的解决方案)
  8. codevs 4927 线段树练习5 线段树基本操作模板
  9. LOJ 6409. 「ICPC World Finals 2018」熊猫保护区
  10. 自制 os 极简教程1:写一个操作系统有多难
  11. 20172020图片对比_50张迷人的对比摄影照片作品
  12. 入侵手游服务器修改数据库,如何入侵手游服务器数据库
  13. 聚宽API获取沪深300股票
  14. Hive/MaxCompute SQL性能优化(三):数据倾斜优化实战
  15. Visual Studio 2019背景美化(背景透明化+自定义背景图片)
  16. taobao app 爬虫杂谈
  17. win10如何把txt更改为bat文件
  18. Hashtable使用
  19. xstart下远程报错已拒绝X11转移申请的解决方法
  20. DBeaver无法连接SQL Server

热门文章

  1. https跨域到http问题解决
  2. LeetCode 28_Implement strStr()
  3. Go语言TCP Socket编程
  4. c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。
  5. 招财铃:即时通信整合,
  6. FreeBSD下安装配置Hadoop集群(性能调优)
  7. 分布学在flash当中的应用体现
  8. DevExpress.XtraBars.Ribbon控件使用系列 (1)创建Ribbon窗体
  9. 怎样得到select所有option里的值
  10. 【PM模块】预防性维护(上)