封装

封装为一个大类,类中包含属性和方法

  • 将属性和方法封装到一个抽象的类中
  • 外界使用类创建对象,然后让对象调用方法
  • 对象方法的细节都封装在类的内部

例题:
需求
1.小明体重75.0公斤
2.小明每次跑步会减肥0.5公斤
3.小明每次吃东西会增重1公斤

class Person:def __init__(self,name,weight):self.name = nameself.weight = weightprint('%s 的体重是 %.2f' %(self.name,self.weight))def run(self):self.weight -= 0.5return '%s 每次跑步体重会减少' %(self.name)def eat(self):self.weight += 1return  '%s 吃东西体重增加' %(self.name)xiaoming  = Person('小明',75)
print(xiaoming.eat())结果:
小明 的体重是 75.00
小明 吃东西体重增加

1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 --增加子弹的数量

class Gun:def __init__(self,model):self.model = modelself.bulletcount = 0def addbllet(self,count):self.bulletcount +=countdef shot(self):if self.bulletcount <= 0 :print('%s 没有子弹了' %s(self.model))returnself.bulletcount -=1print('%s还有%d个子弹' %(self.model,self.bulletcount))class Soldir:def __init__(self,name):self.name = nameself.gun = Nonedef fire(self):if self.gun ==None:print('%s 没有枪' %(self.name))returnself.gun.addbllet(50)self.gun.shot()ak47 = Gun('ak47')
ryan = Soldir('ryan')
ryan.gun = ak47
ryan.fire()结果:
ak47还有49个子弹

继承

  • 继承:实现代码的重用,相同的代码不需要重复写
  • 子类继承父类,可以直接享受父类中已经封装好的方法
  • 子类应该根据职责,封装子类特有的属性和方法
class Animal():def eat(self):print('吃~~~~~')def drink(self):print('喝')def run(self):print('跑')def sleep(self):print('睡')class Cat(Animal):def call(self):print('喵~')fentiao = Cat()
fentiao.eat()
fentiao.run()
fentiao.call()结果:
吃~~~~~
跑
喵~

如果子类重写了父类的方法
在运行中,只会调用在子类中重写的方法而不会调用父类方法

class Cat():def call(self):print('喵~')class HelloKitty(Cat):def speak(self):print('我能说英语')def call(self):print('@#@$@$@#@!#')kt = HelloKitty()
kt.call()结果:
@#@$@$@#@!#

如果子类重写父类的方法后,还想调用父类的方法

class Animal:def eat(self):print('吃')def drink(self):print('喝')def call(self):print('$$$$$')
class Cat(Animal): #继承def call(self):super().call() #调用原本在父亲类的封装方法,如果没有这一行那么.call只有喵,会覆盖之前父类的print('喵')kt=Cat()
kt.eat()
kt.drink()
kt.call()结果:
吃
喝
$$$$$
喵

子类可以继承父类的所有属性和方法
继承具有传递性,子类拥有父类的父类的属性和方法

class Animal():def eat(self):print('吃~~~~~')def drink(self):print('喝')def run(self):print('跑')def sleep(self):print('睡')class Cat(Animal):def call(self):print('喵~')class HelloKitty(Cat):def speak(self):print('我能说英语')class Dog(Animal):def bark(self):print('汪~')kt = HelloKitty()
kt.eat()
kt.speak()结果:
吃~~~~~
我能说英语

多态

以封装和继承为前提,不同的子类对象(两者之间要是继承关系),调用相同的方法

class Dog(object):def __init__(self,name):self.name=namedef game(self):print('%s 开心的玩' %(self.name))class Gaofei(Dog):def game(self):print('%s 和米老鼠一起玩'%(self.name))class Person(object):def __init__(self,name):self.name=namedef gamewith_dog(self,dog): #dog作为一个变量,而不是名称# self.dog=dogprint('%s和%s玩' %(self.name,dog.name))wangcai = Gaofei('高飞')
dabai = Dog('大白')
xiaoming = Person('小明')
xiaoming.gamewith_dog(wangcai)
xiaoming.gamewith_dog(dabai)结果:
小明和高飞玩
小明和大白玩

python——面向对象的三大特性:封装,继承,多态相关推荐

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

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

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

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

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

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

  4. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  5. Python全栈开发——面向对象的三大特性(继承 多态 封装)

    1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...

  6. Java面向对象三大特性(封装继承多态)解释及案例

    文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...

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

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

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

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

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

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

  10. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?

    Java语言具有的特点:面向对象.跨平台.多线程以及网络编程 1. 和C++的区别 1.1 Java隐蔽了C++的指针,避免指针直接操作,程序更加安全. 1.2 Java类继承只能单继承,避免了C++ ...

最新文章

  1. SAP SD基础知识之SD常用BAPI
  2. 全球IP地址数周内用完,或现无法上网情况
  3. 将域用户加入本地power user组的脚本
  4. sql连oracle链接服务器
  5. WebGIS在行业中应用的演变
  6. js GPS 百度地图坐标转换
  7. pwm波如何控制电机代码_柴油发电机机组的控制器该如何操作
  8. Ubuntu 16.04卸载CUDA 6.5和安装CUDA 8.0
  9. 牛逼轰轰!GitHub 上 Star 量最高的 5 个机器学习项目
  10. java服务端项目开发规范
  11. How is Aggregation designed
  12. wordpressQQ登陆php代码,仅在登录时使用wordpress PHP代码
  13. Spring第三篇【Core模块之对象依赖】
  14. Android去掉wps广告,WPS解锁高级功能,PC和安卓版去除广告,精简版!
  15. 网络工程师经常会面对服务器性能,下半网络工程师试卷(下午).doc
  16. 阿里云华北1235、华东1、华东2和华南1分别对应哪些城市?地域节点物理数据中心在哪?... 1
  17. linux下view如何修改字符串,Linux下view命令的使用
  18. Mongodb入门(CRUD与安装)
  19. Qt保存QTextEdit内存至.txt文件中
  20. 有哪些网站,一旦知道,你就离不开了?

热门文章

  1. 超级牛批的IP地址查询工具
  2. Dual-Path Fusion:遥感融合
  3. c语言中管道符作用,由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和=赋值符号的区别...
  4. 炽天覆七环Ajax,【经典】无限剑制——Unlimited blade works
  5. Java APNS开源库apns4j-1.0.1发布
  6. matlab字体安装,matlab安装教程
  7. CSDN博客看不到评论?CSDN博客怎么看评论?(已解决)
  8. 国开计算机组成原理边学边练,国家开放大学-计算机组成原理-形考任务-2017全部答案.docx...
  9. Catia V5-6R2016安装教程 win10系统
  10. spring RestTemplate 实例(NameValuePair)