python面向对象之封装,继承,多态
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。在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面向对象之封装,继承,多态的更多相关文章
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
- Python面向对象,析构继承多态
析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...
- python 面向对象及封装继承和多态
######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...
- python面向对象之封装,多态与继承
一.继承,包括单继承和多继承 对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类 仅需继承父类而不必一一实现每个方法. 实例: #coding=utf-8 class Person( ...
- Python面向对象:封装和多态
一.封装 封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进 ...
- C# 面向对象基础&封装&继承&多态&加深一下冒泡排序写法
(一)面向对象是什么? 面向对象是一种编程思想 (二)为什么要用面向对象? 1.结构清晰 2.易于维护 3.方便扩展 (三)new一个对象是什么过程? 实例化构造函数创建对象的过程就是将类实例化的过程 ...
- Python面向对象中的继承、多态和封装
Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
随机推荐
- Codeforces Round #597 (Div. 2) C. Constanze's Machine
链接: https://codeforces.com/contest/1245/problem/C 题意: Constanze is the smartest girl in her village ...
- Accounts Merge
Description Given a list accounts, each element accounts[i] is a list of strings, where the first el ...
- Elasticsearch 调优之 搜索速度优化
本章讨论搜索速度优化:搜索速度与系统资源.数据索引方式.查询方式等多方面 1.为文件系统cache预留足够的内存 1)应用程序一般情况下,读写都会被操作系统“cache” 2)cache保存在物理内存 ...
- learning scala pattern matching
code: package com.aura.scala.day01 import scala.util.Random object patternMatching01 { def main(args ...
- macOs下安装Android SDK
首先下载 Android SDK for mac 配置安装 1.进入存放 android-sdk-macosx 的目录,然后输入./android sdk就可以调出SDK Manager的图形界面 A ...
- 探究机器码,深入研究C语言程序的机制
用C高级编程语言写的程序,都要经过编译链接成本机可执行的程序.这个可执行程序究竟是什么呢?在Linux上,我们可以用objdump命令很方便地查看一个可执行程序的机器码.我们从一个简单的示例开始,说一 ...
- java中 什么是反射?
JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射 ...
- [RK3399] 调试串口ttyS2改为普通串口
CPU:RK3399 系统:Android 7.1 串口需求量大时,会选择使用 spi 转串口,但是数据量大或者波特率较高时,传输会丢包. 调试串口 ttyS2 也可以让出来,供上层使用,下面是将 t ...
- ML_Homework_Porject_2_LDA_KNN
第二次机器学习的作业完成了,写一下总结. 作业要求:实现用线性判别分析(LDA,LinearDiscriminantAnalysis)的二分类,用KNN比较LDA和PCA在有监督学习下的分类区别. 开 ...
- php手记之03-tp5渲染视图
// 渲染视图 模块@文件/文件名 // return view('index@index/test'); // return view('index@test/test'); // return $ ...