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中,新建的类可以继承一个或多个父类,父类又可以 ...
随机推荐
- 02_Tutorial 2: Requests and Responses 请求和响应
1.请求和响应 1.文档 https://www.django-rest-framework.org/tutorial/2-requests-and-responses/ https://q1mi.g ...
- Spring第二次案例和AOP
Spring加上AOP com.mapper.entity.UserInfo package com.Spring.entity; public class UserInfo { private In ...
- spark sql启动优化
./spark-sql --conf spark.driver.maxResultSize=8g --driver-memory 20g --conf spark.kryoserializer.bu ...
- sql server 计算属性,计算字段的用法与解析
SQL学习之计算字段的用法与解析 一.计算字段 1.存储在数据库表中的数据一般不是应用程序所需要的格式.大多数情况下,数据表中的数据都需要进行二次处理.下面举几个例子. (1).我们需要一个字段同 ...
- webpack 性能优化小结
背景 如今前端工程化的概念早已经深入人心,选择一款合适的编译和资源管理工具已经成为了所有前端工程中的标配,而在诸多的构建工具中,webpack以其丰富的功能和灵活的配置而深受业内吹捧,逐步取代了gru ...
- 2019-2020 ICPC, NERC, Southern and Volga Russian Regional Contest
目录 Contest Info Solutions A. Berstagram B. The Feast and the Bus C. Trip to Saint Petersburg E. The ...
- P4316 绿豆蛙的归宿 期望DP
P4316 绿豆蛙的归宿 期望DP DAG上,每条边有边权,走向相连每条路的概率相等,问从起点到终点所经过的路径总长度期望 因为发现终点走到终点期望为0,定义\(f[i]\)从终点走到\(i\)所经过 ...
- 【概率论】5-4:泊松分布(The Poisson Distribution)
title: [概率论]5-4:泊松分布(The Poisson Distribution) categories: - Mathematic - Probability keywords: - Po ...
- 国外最受欢迎的BT-磁力网站
1.海盗湾 The Pirate Bay 2.KickAssTorrents 3.Torrentz 4.zooqle 5.SumoTorrent 6.TorrentDownloads 7.Rarbg ...
- ajax请求数据动态填充之文档与字符串区别手法
success: function(data){ if(data.status==200){ var realName=data.doc.realName; $("#yishiul" ...