面向对象的三大特征: 封装,继承,多态

面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴

封装

什么是封装:

在面向对象编程的思想中,对代码进行高度封装,封装又叫包装

封装就是指将数据或者函数等客观的事物封装在在一个个的单元中,我们称之为类, 被封装的对象通常被称为抽象数据类型

简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体

封装的原则隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别

封装在编程中的核心作用:

1.整体化代码,减少代码的冗余

2.便于携带,每次需要用到封装的方法时可以直接对方法进行调用

3.提高数据或算法的安全性,可以保护代码被有意或无意的修改

继承

继承指的是描述多个类之间的一个所属关系

单继承:一个类只继承了一个父类 如果类继承了父类,子类就继承了父类的属性和方法

如果多个父类的方法名相同

子类会继承第一个父类的这个方法 通过一个类创建成功后,必须执行一次这个同名方法(可能是自己的,也可能是父类的)

如果子类中没有这个同名方法,会继承第一个父类中的这个同名方法

如果子类中有这个同名方法,则会继承子类中的这个同名方法,父类中的这个同名方法都不继承

多继承:子类如果继承了多个父类,子类就会继承父类多个不同名的属性和方法

如果多个父类的方法名称均不同,子类会全部继承

如果多个父类的方法名称均相同,子类会继承第一个父类的

如何决定继承那个父类的方法

如果子类也有父类的同名方法,那么子类就会选择自己的方法

如果子类中也有同名的方法,所有父类的同名方法都不会继承

通过一个类创建一个对象,必须执行一次init方法,找init方法的顺序要遵循继承链( 类名.mro)

多层继承和多继承是同一个原理包括调用父类中的同名方法包括super的使用都是一样的原理

重写

重写: 是指在子类中重新去写父类中已经有的方法,并且在子类中保持这方法名不变,只有方法体发生改变

方法一:

子类继承了父类,父类不能满足子类的需求。子类重写父类的同名方法

但是子类还想在其类内部使用父类的同名方法方法一:

父类名.父类的同名方法(self)

**方法二:**super函数是用来获取指定的子类在继承链中的后一个类给当前子类的self

super(子类名,self).父类同名方法

一般情况下获取当前子类的直接父类的同名方法可以省略括号中的参数

super().父类同名方法

class shifu1(object):

def __init__(self):

self.name = "小明"

class shifu2(object):

def __init__(self):

self.age = 18

class tudi(shifu1, shifu2):

def __init__(self):

shifu1.__init__(self)

shifu2.__init__(self)

a = tudi()

print("我叫%s,我今年%d!" % (a.name, a.age))

多态

概念: 不同类的对象调用相同的父类的方法,产生不同的结果

特点: 1.多态可以增加代码的灵活性

2.以继承和重写方法为前提

3.是调用方法的技巧,不会影响类的原本的设计

# 创建一个人的类,这个类里面有属性:(姓名,年龄,身高等),要求人的年龄大于0小于300如果小于0则默认为0,大于300默认为300

class Person(object):

def __init__(self, name, age, height):

self.name = name

self.__age = age

self.height = height

self.set_age(age)

def set_age(self, age):

if 300 < age:

self.__age = 300

elif age < 0:

self.__age = 0

else:

self.__age = age

def get_age(self):

return self.__age

zs = Person("张三", 21, "1.78米")

# zs.set_age(500)

print("我叫%s,我今年%d岁了,我的身高是:%s!" % (zs.name, zs.get_age(), zs.height))

类成员

对象成员:指的是这个类中的成员如果要使用和访问只能通过,将类进行实例成一个对象,

然后通过对象去访问这个成员,对象成员无法通过类名直接访问,不管是方法还是属性

类成员:使用@classmethod修饰器进行修饰方法

类成员指的是这个成员在外部的访问可以通过类的名称或者该类实例的对象进行访问

静态方法

静态成员:使用@staticmethod修饰器来进行修饰方法,静态方法不需要定义参数,

可以通过类或方法进行访问,这种方法就类似于数据类型转换方法一样

例如类里面有一些功能,这个功能和实例对象其实并没有任何关系

但是需要让这个功能称为这个类的成员,可以采用静态或者类方法,访问可以直接通过类进行访问

本文地址:https://blog.csdn.net/Layfolk_XK/article/details/107644691

希望与广大网友互动??

点此进行留言吧!

python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)相关推荐

  1. Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]

    ✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...

  2. OC面向对象的三大特征(封装 继承 多态)习题2 复合

    复合:一个类中有一个成员变量是另外一个类的对象. 比如我现在要制作一台电脑,电脑需要CPU,显示器,鼠标和键盘等.这些东西的研发都是很复杂的过程.如果现在有成型的CPU等组件,就可以直接用这些组件攒一 ...

  3. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  4. 三大特征 封装 继承 多态

    ''' 1.面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性 ...

  5. 面向对象的四大特征 封装 继承 多态 抽象

    1.封装 广义: 类 方法 包 的定义本身就是一种封装 狭义: 在设计一个类的时候 将所有的属性设置为私有的 并对各个私有的属性设计相应的 存/取方法 来完成对属性的使用 私有化只能代表封装的特性 可 ...

  6. python函数调用的三种方式_python函数调用的四种方式

    原标题:python函数调用的四种方式 第一种:参数按顺序从第一个参数往后排#标准调用 运行结果: 第二种:#关键字调用 注意:关键调用从哪开始的,从哪以后都必须使用关键字调用除了'*'收集参数.不能 ...

  7. python程序的三种控制结构_python二级考试大纲内容:程序的三种控制结构

    #python# 继续学习python二级考试大纲内容: 程序的三种控制结构 顺序结构.分支结构和循环结构 这三种控制结构是编程的基础组成部分,无论是准备考全国计算机等级考试还是单纯是为了兴趣而学习p ...

  8. Python攻城师的成长————面向对象的三大特征(继承、多态)

    学习目标: 了解继承与多态的概念,重点是要学会运用继承去处理问题 学习内容: 继承 在面对对象程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继 ...

  9. python定时爬虫三种方法_Python爬虫定时计划任务的几种常见方法

    记得以前的Windows任务定时是可以正常使用的,今天试了下,发现不能正常使用了,任务计划总是挂起.接下来记录下Python爬虫定时任务的几种解决方法. 1.方法一.while True 首先最容易的 ...

最新文章

  1. C++使用命名空间中成员的三种方式
  2. python入门指南百度云-Python入门指南
  3. leetcode C++ 28. 实现 strStr() 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 need
  4. 深入浅出理解 Spark:环境部署与工作原理
  5. Linux配置最基础的命令
  6. 用VMWARE学习组网(四)
  7. Oracle修改SID(实例名)
  8. js修改背景图片路径_前端面试题————关键渲染路径(Critical Rendering Path)...
  9. python读取数据库数据、并保存为docx_Python - 爬取博客园某一目录下的随笔 - 保存为docx...
  10. 文件错误关于hibernate中报Duplicate class/entity mapping org.model.User错的问题
  11. mysql mgr 读写分离_MySQL Group Replication mgr 单主 proxysql 读写分离配置过程
  12. python 字典的函数
  13. 关于Universal-Image-Loader加载同一张图只成功一张的问题
  14. Python入门书 - 简明Python教程(A Byte of Python)
  15. PMP 考点 第十一章 项目风险管理
  16. AES攻击方法 :差分密码分析 boomerang attack飞去来器攻击
  17. 阿里DATAV的使用方法(大屏生成工具)
  18. 初识C语言——C语言基础知识
  19. HDU-3237-Help Bubu
  20. 全世界最高级最好的操作系统,人人都可以用

热门文章

  1. Linux-lsof命令
  2. 十一、H.264的Slice Header解析
  3. mysql 事务涉及锁吗_MySQL-锁机制和事务
  4. case when判断大于某值_Python 代码判断逻辑太复杂?这里有几条最佳实践和技巧...
  5. qt中socket通信流程图_使用QT实现简单的tcp/ip通信
  6. 来自妹子的需求:App的logo自动切图脚本
  7. java超市管理系统项目,HR的话扎心了
  8. 十年Java编程开发生涯,java内存溢出和内存泄漏的区别
  9. 【Kali渗透全方位实战】利用Beef进行XSS会话劫持(XSS Stored)
  10. Tensorflow【实战Google深度学习框架】—TensorBoard