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 = gender class 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 ): pass class Student(Person): pass class Teacher(Person): pass class SkillMixin( object ): pass #技能类 class BasketballMixin(SkillMixin): def skill( self ): return 'basketball' class FootballMixin(SkillMixin): def skill( self ): return 'football' #拥有哪种技能的人的类型 class BStudent(Student, BasketballMixin): #既是学生,又会打篮球的人,即继承学生类,也继承篮球技能类,多重继承 pass class FTeacher(Teacher, FootballMixin): pass s = BStudent() print s.skill() >>> basketball t = 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 .name class 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类的继承、多继承及其常用魔术方法
继承 一个类可以派生出一个子类,这个子类可以使用父类的属性及方法,也可以在父类的基础上添加自己的独特属性或方法.属性和方法的继承的顺序是先从自己开始,找不到再去找父类,父类没有再找父类的父类,其尽头就 ...
随机推荐
- MVC添加Area出现“到多个与名为“Home”的控制器匹配的类型的解决方法”
新建MVC项目,添加HomeController,然后添加名字为Admin的Area后,新建HomeController.这个时候,运行项目会出现以下错误: 解决办法如下: 打开网址下面的HomeCo ...
- Fork/Join框架详解
Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork/Join框架要完成两件事情: 1.任务分 ...
- springcloud之config配置中心-Finchley.SR2版
本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...
- JavaScript 闭包小记
最近朋友面试被问到了 JS 闭包的问题,本人一时语塞,想起了袁华的一句话:“这道题太难了,我不会做,不会做啊!”. JS 闭包属于面向对象的一个重要知识点,特此本人又开始了一段说走就走的旅程. 闭包就 ...
- 死磕 java集合之LinkedHashSet源码分析
问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashS ...
- .NetCore 使用Cookie
1.首先我们在Startup下面的ConfigureServices中注册授权认证服务以及AddCookie services.AddAuthentication(CookieAuthenticati ...
- Redis集群伸缩
集群扩容 前提准备,目前集群中一共有6台机器,端口号分别是6381.6382.6383.6384.6385.6386 1) 准备新节点 准备两个新节点,端口号为6387和6388,配置和以前集群配置一 ...
- SpringBoot系列——Redis
前言 Redis是一个缓存.消息代理和功能丰富的键值存储.StringBoot提供了基本的自动配置.本文记录一下springboot与redis的简单整合实例 官方文档:https://docs.sp ...
- 展开隐形的翅膀,WPR003N补完篇
在上一回合要搞刷机!从它的尸体上踏过去!钢板云路由!WPR003N复活!成功启动OPENWRT中,笔者成功的让一个4年前主流芯片搭上OS的快船,留下一段佳话. 今天看着抽屉里的WPR003N,回忆它之 ...
- 关于Exceptionless的使用注意
大家都应该比较熟悉NLOG,我们知道log4net和nlog,也有其它的记日志框架.目前我们的生产环境使用nlog,而且对Exceptionless的对接也是无缝的.可能有人会问为什么不用ELK,主要 ...