三大特性

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

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. 编写一个程序,打印输入中各个字符出现频度的直方图
  2. C++中流状态badbit, failbit, eofbit
  3. php Imagick()扩展,实现将原图截取成不同规格尺寸的图片
  4. 基于 EntityFramework 生成 Repository 模式代码
  5. java实用教程——组件及事件处理——对话框(颜色对话框,自定义对话框)
  6. 95-190-044-源码-window-window三要素
  7. mysql添加有效值_物理数据库设计 - 限定列的有效值
  8. 复制加网站信息的javascript代码及对应的javascript阻止命令
  9. 16选1数据选择器和32选1数据选择器multisim
  10. 思科模拟器配置路由表详细教程
  11. 深蓝学院-多传感器融合定位-第3章作业
  12. R语言使用grid包的unit函数将数据对象转化为有计量单位的数据(例如转化为毫米单位、长度单位mm)
  13. android 阅读器字体,Android字体设置及Roboto字体使用方法
  14. 如何调用百度和华为的API?
  15. 嘉兴 机器人仓库 菜鸟_菜鸟物流嘉兴未来园区的工业机器人系统运维员的一天...
  16. 天原笔记(3)气旋与反气旋
  17. html5 sketchpad,Sketchpad:基于html5在线图像绘画板
  18. Matplotlib系列(八):嵌入Python Qt界面
  19. Shell循环语句(for、while、until)及echo、IFS
  20. linux系统怎么调节分辨率,直观:Linux下的高分辨率屏幕设置

热门文章

  1. 如何使用Spring管理Filter和Servlet
  2. IE8-开发人员工具使用(一)
  3. android中matrix的单位,Android中canvas和matrix之间的关系是什么?
  4. 【测试】SAP选择屏幕界面配图实现
  5. ME_DIRECT_INPUT_INFORECORD 信息记录批量修改程序
  6. 如何建立应付暂估明细查询
  7. SAP顾问,市场的双重需求
  8. 为什么说OLAP产品毁了BI?
  9. 微信公众平台开发环境搭建
  10. OBYC中的GBB一般修改的解释