封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。在python的类中,封装即通过__init__函数将数据赋给对应的变量进行保存,便于其他地方使用

 所以,在使用面向对象的封装特性时,需要:

     将内容封装到某处
从某处调用被封装的内容

class Car(object):
'Car' def __init__(self, name, color, price):
self.name = name
self.color = color
self.price = price def run(self):
print("%s的%s正在跑" % (self.color, self.name)) car = Car('大奔', '黑色', '80万')
car.run()
car2 = Car('法拉利', '红色', '1000万')
car2.run()
黑色的大奔正在跑
红色的法拉利正在跑

通过__init__构造函数给变量赋值,使成员函数可以使用初始化的变量。达到将数据的方法封装的目的。

继承。。。。

之前说过我们可以把狗抽象成一个类,那么,我们是不是也可以把猫抽象成一个类?再看,猫和狗是不是也具备一些相同的特征?

继承

比如,跑,叫,吃东西。。。那把这两者结合是不是还可以再抽象出一个新的类,比如说Animal这个类?

class Animal(object):
'Animal' def __init__(self):
print("Animal 的__init__方法") def run(self):
print("running") def shout(self):
pass class Dog(Animal): # 继承Animal
'Dog' def __init__(self):
print("Dog 的__init__方法") def shout(self):
print("汪汪汪") class Cat(Animal): # 继承Animal
'Cat' def shout(self):
print("喵喵喵") dog = Dog()
cat = Cat()

运行结果如下

Dog 的__init__方法
Animal 的__init__方法

通过class 类名(要继承的类的类名)即可实现继承。可以发现,调用了两次__init__方法,但是在Cat类里面没有写__init__函数,那为什么会出现这样的情况呢?继承,因为Cat继承了Animal类,所以,会出现上面这种情况,虽然Dog类也继承了Animal类,但是在Dog类中我们定义了__init__函数,或者说是重写了__init__函数,因此,Dog类在实例化时不会调用父类的构造方法,而是执行自己的构造方法。那么如果我们自己不仅想重写构造函数而且还想要继承父类的构造函数,那如何让做呢?

第一种方式:父类名.__init__(self)

第二种方式:super(自己的类名,self).__init__()

    def __init__(self):
print("Cat 的__init__方法")
# 第一种、调用超类的构造方法
Animal.__init__(self)
# 第二种、super函数返回一个super对象,解析过程自动查找所有的父类和父类的父类,当前类和对象可以作为super函数的参数使用,调用函数返回的方法是超类的方法。使用super函数如果子类继承多个父类只许一次继承,使用一次super函数即可。
super(Cat, self).__init__()

python面向对象之封装,继承,多态的更多相关文章

  1. Python面向对象04 /封装、多态、鸭子类型、类的约束、super

    Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...

  2. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  3. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

  4. Python面向对象,析构继承多态

    析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...

  5. python 面向对象及封装继承和多态

    ######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...

  6. python面向对象之封装,多态与继承

    一.继承,包括单继承和多继承 对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类 仅需继承父类而不必一一实现每个方法. 实例: #coding=utf-8 class Person( ...

  7. Python面向对象:封装和多态

    一.封装 封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进 ...

  8. C# 面向对象基础&封装&继承&多态&加深一下冒泡排序写法

    (一)面向对象是什么? 面向对象是一种编程思想 (二)为什么要用面向对象? 1.结构清晰 2.易于维护 3.方便扩展 (三)new一个对象是什么过程? 实例化构造函数创建对象的过程就是将类实例化的过程 ...

  9. Python面向对象中的继承、多态和封装

    Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...

  10. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

随机推荐

  1. java中使用redis --- List列表的简单应用

    1.Dos中启动server端 2.idea中启动client端 public class RedisTest01 { public static void main(String[] args){ ...

  2. SCPI 语言简介

    电子负载中需要用到,所以记录下.来源是德科技 SCPI(可编程仪器的标准命令)是一种基于 ASCII 的仪器编程语言,供测试和测量仪器使用. SCPI 命令采用分层结构,也称为树系统. 相关命令归组于 ...

  3. RocketMQ的技术亮点

    高性能 存储原理 零拷贝 数据结构与存储逻辑 刷盘策略 长轮询PULL RocketMQ的Consumer都是从Broker拉消息来消费,但是为了能做到实时收消息,RocketMQ使用长轮询方式,可以 ...

  4. HttpReader

    头文件: #pragma once #include <afxinet.h> class CSF_HttpDataReader { public: CSF_HttpDataReader(v ...

  5. Jmeter之JDBC类型组件

    一.背景 在测试过程中,避免不了与数据库打交道,比如数据的校验.数据的准备或者重置操作,又或者对数据库进行增删改查,基于以上诉求,在Jmeter中是如何实现的呢.可使用JDBC类型组件来实现以上功能操 ...

  6. effective Java 第三版学习笔记

    创建对象类型的 1,静态工厂方法代替构造器 静态工厂方法有名称,不容易混乱他的作用 不必再每次调用他的时候创建实例,创建实例的代价是高的,可以重复利用缓存的对象 静态工厂甚至能返回子类对象,例如在接口 ...

  7. jQuery获取元素的方式

    一.通过id选择器获取并操作元素--------$("#id属性的值") <script src="http://libs.baidu.com/jquery/1.1 ...

  8. fdisk分区命令

    fdisk是Linux系统中最常用的分区工具,通过这个命令也可以查看系统中所有可用的分区,但是这个命令只支持MBR的分区表(这句话应该只对某些系统,CentOS7-1810适用,Debian9.5和o ...

  9. Python如何import其它.py文件及其函数

    ​ 如上图所示,我想在test_1.py文件中import我在lstm_1.py中定义的LstmParam和 LstmNetwork.我直接采用的是最简单的引用方法:from lstm_1 impor ...

  10. [bzoj 4650][NOI 2016]优秀的拆分

    传送门 Description 如果一个字符串可以被拆分为\(AABB\) 的形式,其中$ A$和 \(B\)是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串\(aabaaba ...