1、封装

封装,就是只能在类的内部访问,外部访问属性或方法会报异常,python中的封装很简单,只要在属性前或者方法名前加上两个下划线就可以,如self.__name,def __eat(self)这样就完成了属性和方法的私有化,也就是封装。
class hj:
_arg = 'world' # 封装
__kws = 'kws' # 封装
def __init__(self):
print(self._arg) # 内部调用一个下划线的封装
print(self.__kws) # 内部调用两个下划线的封装 # 提供封装访问函数让外部可以使用
def get(self):
print(self.__kws) h = hj()
print(h._arg) # 一个下划线的封装 外部是可以调用的
#print(h.__kws) # 两个下划线的封装 外部是无法调用的(其实是可以调用的,只不过python给你做个一个重名的操作(_hj__kws))
h.get() # 通过封装的方法来调用

2、继承

官方解释:所谓继承指提供了同一类对象共性的处理方法,子类继承父类共性的东西。 这样有利于代码的复用性,即子类拥有父类的方法。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

通俗讲就是:父类的是子类的,子类的还是子类的。

python中继承也非常简单,定义一个Animal类,下面有一个eat()方法,再定义一个Dog类,Dog类中什么都不写,用pass代替。然后实例化一个dog,让dog继承Animal类,dog可以使用eat()方法。
class Animal(object):
def __init__(self,name):
self.name = name
def eat(self):
print(self.name,"吃饭") class Dog(Animal):
pass
dog=Dog("旺财")
dog.eat() 结果:
旺财 吃饭

重写:和父类的方法名称一样。但是在子类里面,重新实现。

  1、完全覆盖

class Animal:

    def __init__(self,name,private_v1):
self.name = name
self._private_v1 = private_v1
self.__private_v2 = "private_really"  # 私有化,不对子类开放 def run(self):
print("跑!!") class Dog(Animal): # 继承父类(Animal) def __init__(self,name,kind):
self.name = name
self.kind = kind def eat(self):
print("一只名叫 {} 的 {} 在啃骨头!!".format(self.name,self.kind)) def run(self): # 重写父类的run()方法
print("我是一条狗,我有四条腿跑!!") # 实例化
dog = Dog("二狗","哈士奇")
dog.run()
dog.eat() 结果:
我是一条狗,我有四条腿跑!!
一只名叫 二狗 的 哈士奇 在啃骨头!!

  2、保留父类的做法,在它的基础上再扩展其它的内容。(扩展方式:super())

    super()的2种表达:

      super().方法(参数列表)

      super(子类名,self).方法(参数列表)

class Animal:

    def __init__(self, name, private_v1):
self.name = name
self._private_v1 = private_v1
self.__private_v2 = "private_really" def run(self):
print("跑!!") class Dog(Animal): # 继承父类Animal def __init__(self, name, kind, private_v1):
# 方法一
super().__init__(name, private_v1) # 调用父类现成的方法
# 方法二
# super(Dog,self).__init__(name)
self.kind = kind # 扩展子类自己的特性 def eat(self):
print("一只名叫 {} 的 {} 在啃骨头!!".format(self.name, self.kind)) def gogo(self): # 完全颠覆父类的做法
super().run() # 父类做法
print("我是一条狗,我有四条腿跑!!") # 我的做法 # 实例化
dog = Dog("小白","二哈","private_v1")
dog.eat()
dog.gogo() 结果:
一只名叫 小白 的 二哈 在啃骨头!!
跑!!
我是一条狗,我有四条腿跑!!

多继承:

在python中是可以多继承的,继承的先后顺序是有区别的,当我们调用方法的时候,如果第一个继承的找不到,才会去第二个中找,但是只要在第一个类中找到调用的那个方法,即使参数个数不匹配也不会调用第二个父类中的,此时会报错。

class Student:
def study(self):
print("我是学生,我爱学习,我爱班级!") class Employee:
def work(self):
print("我要赚钱,我要工作,我爱工作!!") class People(Student,Employee): # 继承Student类,Employee类 def do_something(self):
self.work()
self.study() p = People()
p.do_something() 结果:
我要赚钱,我要工作,我爱工作!!
我是学生,我爱学习,我爱班级!

3.多态

python中本质上是没有真正多态这种思路,只是形式上有这样一个多态的思路。

class Animal(object):
def __init__(self,color):
self.color=color
def eat(self):
print("吃饭") class Cat(Animal):
def eat(self):
print("猫吃鱼") class Dog(Animal):
def __init__(self,name,age,color):
super(Dog,self).__init__(color)
self.name=name
self.age=age
def eat(self):
print("狗吃肉")
def feed(obj):
obj.eat() an=Animal("白色")#实例化Animal
cat=Cat("棕色")#实例化Cat
dog=Dog("小黄",2,"黄色")#实例化Dog feed(an)
feed(cat)
feed(dog) 结果:
吃饭
猫吃鱼
狗吃肉
定义了一个Animal父类,两个子类Cat和Dog里面都有eat()方法,最后再定义一个feed()喂养方法,
传入一个obj对象,调用obj.eat(),然后实例化Animal,Cat和Dog,分别在feed中传入实例化对象an,cat和dog会分别打印出不同的语句,这个就是python中的多态。

(09)-Python3之--类的三大特性(封装、继承、多态)的更多相关文章

  1. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  2. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

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

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

  4. 转 OC温故:类的三大特性(封装,继承,多态)

    原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性 ...

  5. OC学习篇之---类的三大特性(封装,继承,多态)

    之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习 ...

  6. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  7. day36 类的三大特性---封装以及Property特性

    目录 类的封装 如果真的要拿 类的property特性 setter & deleter 类属性用法 类与对象的绑定方法和非绑定方法 对象方法&类方法&静态方法 隐藏模块内的函 ...

  8. python - class类 (七) 三大特性 - 封装 结尾

    封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ...

  9. python - class类 (四) 三大特性之一 :继承

    继承: #继承 #什么时候用继承? # 1.当类之间有显著的不同,并且较小的类是较大的类的所需的组建时,用组合比较好. # 2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 # ...

随机推荐

  1. 转载:从输入 URL 到页面加载完的过程中都发生了什么事情?

    原帖地址:http://www.guokr.com/question/554991/ 1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP ...

  2. html怎么在网页标题栏上添加图标

    需要先把图片格式转换为.ico类型在这个网址在线转换很方便:https://www.easyicon.net/covert/在<head></head>加一行来显示图标(注意, ...

  3. vs2012新特性

    VS2012的六大技术特点: 1.VS2012和VS2010相比,最大的新特性莫过于对Windows 8Metro开发的支持.Metro天生为云端而生,简洁.数字化.内容优于形式.强调交互的设计已经成 ...

  4. (五)vimscript打印信息

    1.打印信息 使用vimscript时,打印信息的命令是echo和echom,可以通过help echo及help echom命令查看帮助文档,而echo与echom有些许的区别, :echom &q ...

  5. java集合大总结

    Java集合大总结 java集合框架简图(API关系图): 虚线框表示接口,实线框表示类. 特点和使用总结: Collection: 单列单值. List: 有序(查询顺序和插入顺序一致),有下标(索 ...

  6. 记 CentOS 服务器上安装 neo4j 图数据库及本地访问

    下载 去官网下载压缩包放到服务器上.地址为neo4j 下载中心,我这里选择的是 Neo4j 3.5.25 (tar).具体如何做呢?我这里使用的是土方法,即先压缩包下载到本地电脑(win 10系统), ...

  7. [Deep Learning] 神经网络编程基础 (Basics of Neural Network Programming) - 逻辑回归-梯度下降-计算图

    在神经网络中,假如有m个训练集,我们想把他们加入训练,第一个想到得就是用一个for循环来遍历训练集,从而开始训练.但是在神经网络中,我们换一个计算方法,这就是 前向传播和反向传播. 对于逻辑回归,就是 ...

  8. 什么是Solon?

    Solon是参考Spring boot 和 Javalin 而设计.吸取了两者的的优点,避开了很多繁重的设计,使其支持http, websocket, socket 三种通讯信号接入.Solon 2M ...

  9. 学习 Gin 总结(2020.12.30-31)

    2020.12.30 问题总结 中间件 context.Next() 源码注释: // Next should be used only inside middleware. // It execut ...

  10. Hbase性能调优(二)

    一.HBase关键参数配置指导 如果同时存在读和写的操作,这两种操作的性能会相互影响.如果写入导致的flush和Compaction操作频繁发生,会占用大量的磁盘IO操作,从而影响读取的性能.如果写入 ...