python类的继承、封装和多态
摘自https://www.cnblogs.com/evablogs/p/6724477.html
继承
|
1
2
3
4
5
6
7
8
|
class Person(object): def __init__(self, name, gender): self.name = name self.gender = genderclass Student(Person): def __init__(self, name, gender,score): #score属性是子类自己的属性 super(Student,self).__init__(name,gender) #super(子类名称,self).__init__(继承父类的属性1,属性2):初始化父类,继承Person父类的name和gender属性 self.score=score |
除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。
多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#哪类人class Person(object): passclass Student(Person): passclass Teacher(Person): passclass SkillMixin(object): pass#技能类class BasketballMixin(SkillMixin): def skill(self): return 'basketball'class FootballMixin(SkillMixin): def skill(self): return 'football'#拥有哪种技能的人的类型class BStudent(Student, BasketballMixin): #既是学生,又会打篮球的人,即继承学生类,也继承篮球技能类,多重继承 passclass FTeacher(Teacher, FootballMixin): passs = BStudent()print s.skill()>>> basketballt = FTeacher()print t.skill()>>> football |
多态
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class Person(object): def __init__(self,name): self.name=name def a(self): #Person父类的a方法 return 'I am a Person,my name is %s' %self.nameclass Student(Person): def __init__(self,name,age): super(Student,self).__init__(name) self.age=age def a(self): #Student子类的a方法 return 'I am a Student,my name is %s' %self.name class Teacher(Person): def __init__(self,name,score): super(Teacher,self).__init__(name) self.score=score def a(self): #Teacher子类的a方法 return 'I am a Teacher,my name is %s' %self.name def show_a(x): #定义一个方法,用于接收x参数,返回每个类实例对象相对应的方法 print a()p=Person('Bob')s=Student('Alice',12)t=Teacher('Lily',80)结果:>>> show_a(p)I am a Person,my name is Bob>>> show_a(s)I am a Student,my name is Alice>>> show_a(t)I am a Teacher,my name is Lily结果返回子类自己的方法,但当子类的方法找不到时会顺着子类找到父类相对应的方法 |
封装
将细节封装起来提供一个接口被访问,有效地保证了细节的安全。
|
1
2
3
4
5
6
7
8
9
|
class Person(object): def __init__(self): self.__name='a' @property #使用@property将一个方法name变成属性,可以直接.name访问 def name(self): #封装self.__name属性 return self.__name p1=Person()p1.name #p1.name可以直接访问name方法 |
python类的继承、封装和多态的更多相关文章
- Python类的继承(进阶5)
转载请标明出处: http://www.cnblogs.com/why168888/p/6411918.html 本文出自:[Edwin博客园] Python类的继承(进阶5) 1. python中什 ...
- 孤荷凌寒自学python第二十二天python类的继承
孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...
- python基础之继承原理,多态与封装
1.什么是继承? 继承是一种创建新的类的方式.class A: passclass B: pass2.如何继承---->如何寻找继承关系 现实生活中找继承关系是自下而上,在程序中写是自上而下继承 ...
- python类的继承和多态,获取对象信息
继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(se ...
- python 类定义 继承
0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...
- 记录Python类与继承的一个错误
今天在学python的类与继承的时候遇到一个错误,原来是自己在ctrl+c ctrl+v的时候漏了一个括号 class Car(): def __init__(self,make,year,mode ...
- Python 类的继承__init__() takes exactly 3 arguments (1 given)
类(class),可以继承基类以便形成具有自己独特属性的类,我们在面向对象的编程中,经常用到类及其继承,可以说没有什么不是类的,今天我们就来详细探讨一下在python中,类的继承是如何做的. 我们假设 ...
- day30 python类的继承,抽象类等
Python之路,Day17 = Python基础17-面向对象入门 继承 class Student(People): pass print(Student.__bases__) # 查看 Stud ...
- python类、继承
Python 是一种面向对象的编程语言.Python 中的几乎所有东西都是对象,拥有属性和方法.类(Class)类似对象构造函数,或者是用于创建对象的"蓝图". 一.python ...
- python类的继承、多继承及其常用魔术方法
继承 一个类可以派生出一个子类,这个子类可以使用父类的属性及方法,也可以在父类的基础上添加自己的独特属性或方法.属性和方法的继承的顺序是先从自己开始,找不到再去找父类,父类没有再找父类的父类,其尽头就 ...
随机推荐
- sun.misc jar包
一直以来Base64算法的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder来进行的.但是这个类是sun公司的内部方法,并没有在Java API中公开过,不属 ...
- 如何通过免费开源ERP Odoo建立你的团队, 销售过程和目标
这种快速的一步一步的指南将引导您完成Odoo CRM, 帮助您轻松处理您的销售渠道, 时刻从线索到客户管理您的销售渠道. 配置 从 Odoo初始化后,生成你的数据库, 选择CRM 作为第一个app安装 ...
- 全球第一免费开源ERP Odoo WMS库存管理高级路线设置详解
概览 路线就是推规则和拉规则的合并整理.Odoo可以配置高级推/拉路线的配置, 例如 : 管理产品的制造链条 为每个产品管理默认位置 根据业务需求在仓库中定义路线, 例如质检, 售后和供应商退货 租用 ...
- java多线程 生产者和消费者 lock
package com.atguigu.thread.lock; import java.util.concurrent.locks.Condition; import java.util.concu ...
- Git:三、工作原理
首先,我们对工作区也就是文件夹中的文档进行修改. 然后,把修改并需要存档的文档用add命令放到暂存区,并且可以放很多文档. 最后,一个阶段的工作告一段落,使用commit命令把暂存区的内容一股脑存到G ...
- TTL 和 DNS TTL 的区别
TTL TTL是 Time To Live 的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量.TTL是IPv4包头的一个8 bit字段.在IPv4包头中TTL是一个8 bit字段,它位于 ...
- Fork/Jion框架详解
◆Fork/Jion框架可以干什么◆ 如果你要处理1万条数据,但是你的能力暂时还不够,一个简单快捷的办法就是你可以把每次只处理100条,等到处理100次之后再把所有的结果聚合起来你就处理完了这1万条数 ...
- PHP全栈学习笔记10
php常量,常量是不能被改变的,由英文字母,下划线,和数字组成,但是数字不能作为首字母出现. bool define ( string $name , mixed $value [, bool $ca ...
- 网卡的 Ring Buffer 详解
1. 网卡处理数据包流程 网卡处理网络数据流程图: 图片来自参考链接1 上图中虚线步骤的解释: DMA 将 NIC 接收的数据包逐个写入 sk_buff ,一个数据包可能占用多个 sk_buff , ...
- 单例模式的优化之路(java)
1.概述 最近在优化公司以前老项目的代码时,发现有些类的代码频繁地创建和销毁对象,资源消耗比较严重.针对这些做了一些优化,改用单例模式,避免频繁的创建和销毁对象,说起单例模式,相信每个人都会写,接下来 ...