通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现

继承概念的实现方式主要有2类:实现继承、接口继承。

Ø         实现继承是指使用基类的属性和方法而无需额外编码的能力;
Ø         接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法)
单继承:
 
class Person(object):
def __init__(self, name,age):
self.name = name
self.age = age def eat(self):
print("person is eating")
self.num = 10
class Man(Person):
def __init__(self, name, age,money):
super(Man,self).__init__(name, age) ##使用super继承,等于 Person.__init__(self,name,age)
self.money=money
多继承
Python2 经典类是按照深度优先继承的,新式类是按照广度优先继承的
Python3 经典类和新式类都是按照广度优先来继承
当继承多个父类时,多个父类构造函数的参数个数必须相同,否则会报错。
class animal(object):
def __init__(self,name,age):
self.name=name
self.age=age def eat(self):
print("animal is eating")
self.num = 5 class person(object):
def __init__(self, name,age):
self.name = name
self.age = age def eat(self):
print("person is eating")
self.num = 10
class Man(person,animal):
def __init__(self, name, age,money): ###python3 init时会按照广度优先
super(Man,self).__init__(name, age) ##使用super多继承
self.money=money ###子类复写父类方法
def eat(self):
super().eat() ##对父类重写时,只能通过super方法来调用父类的方法。正在重写时,无法通过self调用
self.num+=3
###子类调用父类方法
def big_eat(self):
self.eat() ##使用self调用子类的方法,如果子类重写了父类的方法,会调用重写后的方法,没有的话就调用父类的方法。 m1=Man("paul",'22','500')
m1.big_eat()
#>>>person is eating
print(m1.num)
#>>13

  

综合练习:

class SchoolMember(object):
members = 0 # 初始学校人数为0 def __init__(self, name, age):
self.name = name
self.age = age def tell(self):
pass def enroll(self):
'''注册'''
SchoolMember.members += 1
print("\033[32;1mnew member [%s] is enrolled,now there are [%s] members.\033[0m " % (
self.name, SchoolMember.members)) def __del__(self):
'''析构方法'''
print("\033[31;1mmember [%s] is dead!\033[0m" % self.name) class Teacher(SchoolMember):
def __init__(self, name, age, course, salary):
super(Teacher, self).__init__(name, age)
self.course = course
self.salary = salary
self.enroll() def teaching(self):
'''讲课方法'''
print("Teacher [%s] is teaching [%s] for class [%s]" % (self.name, self.course, 's12')) def tell(self):
'''自我介绍方法'''
msg = '''Hi, my name is [%s], works for [%s] as a [%s] teacher !''' % (self.name, 'Oldboy', self.course)
print(msg) class Student(SchoolMember):
def __init__(self, name, age, grade, sid):
super(Student, self).__init__(name, age)
self.grade = grade
self.sid = sid
self.enroll() def tell(self):
'''自我介绍方法'''
msg = '''Hi, my name is [%s], I'm studying [%s] in [%s]!''' % (self.name, self.grade, 'Oldboy')
print(msg) if __name__ == '__main__':
t1 = Teacher("Alex", 22, 'Python', 20000)
t2 = Teacher("TengLan", 29, 'Linux', 3000) s1 = Student("Qinghua", 24, "Python S12", 1483)
s2 = Student("SanJiang", 26, "Python S12", 1484) t1.teaching()
t2.teaching()
t1.tell()

  

【python】类的继承和多态的更多相关文章

  1. python类的继承和多态

    现在属于是老年人的脑子,东西写着写着就忘了,东西记着记着就不知道了.之前学C++的时候就把类.对象这块弄得乱七八糟,现在是因为很想玩python,所以就看看python的类和对象. 就像说的,类有三个 ...

  2. python类的继承和多态,获取对象信息

    继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(se ...

  3. Python类的继承(进阶5)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6411918.html 本文出自:[Edwin博客园] Python类的继承(进阶5) 1. python中什 ...

  4. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  5. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  6. 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...

  7. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  8. 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    [游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态   阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...

  9. python之7-2类的继承与多态

    类的继承的意思就如同父子关系一样,这个儿子继承了父亲的一切,但是在某些地方(属性)相同的时候,儿子的属性大于老子的属性(覆盖),最底层类,总会继承最接近它的那个类的属性init 类的多态总是和继承相连 ...

  10. Python 中的继承、多态和封装

    涉及问题: Python 中如何实现多继承,会有什么问题? Python 中的多态与静态方法有什么区别? 答案要点如下: Python 中的继承,就是在定义类时,在括号中声明父类,简单示例如下: cl ...

随机推荐

  1. linux 后台运行命令 nohup命令

    转载:http://if.ustc.edu.cn/~ygwu/blog/archives/000538.html 2005年04月18日 简单而有用的nohup命令在UNIX/LINUX中,普通进程用 ...

  2. knn原理与实践

    knn法是一种基本分类与回归方法 应用:knn算法不仅可以用于分类,还可以用于回归.. 1.文本分类:文本分类主要应用于信息检索,机器翻译,自动文摘,信息过滤,邮件分类等任务. 2.可以使用knn算法 ...

  3. 3d加速的一些问题

    笔记本一般有双显卡,默认可以切换,但是使用浏览器打开的要合适的浏览器 打开WEBGL程序,包括驱动,浏览器,有时候需要手工设置独立显卡 一般来说价钱四五千以上的笔记本电脑都是支持WEBGL的,而且可以 ...

  4. Java之美[从菜鸟到高手演变]之设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  5. Windows Store App 旋转中心

    旋转中心的位置可以通过设置CenterOfRotationX.CenterOfRotationY和CenterOfRotationZ属性来指定.CenterOfRotationX和CenterOfRo ...

  6. ios打包

    ios7.1及以上 itms-services://?spm=0.0.0.0.WIsvD2&action=download-manifest&url=https://mtl.aliba ...

  7. Linux (Ubuntu) 下配置VPN服务器

    昨天网上找了下VPN的相关信息,居然各种撞墙,特别郁闷,自己不容易找到的东西,记录下VPN的配置信息 ubuntu 13.1下配置VPN  ,采用PPTP实现, 第一步.安装pptpd,没有安装包记得 ...

  8. Java 并发和多线程(二) 多线程的优点 [转]

    原文:http://tutorials.jenkov.com/java-concurrency/benefits.html 作者:Jakob Jenkov        翻译:古圣昌         ...

  9. IIS7配置asp网站

    An error occurred on the server when processing the URL. Please contact the system administrator. If ...

  10. 黑客长期摇号不中"黑"掉北京小客车摇号网

    新闻链接:http://www.2cto.com/News/201310/248936.html 新闻时间:2013-10-11 新闻正文: 为发泄长期摇号不中的不满,同时也为自己研发的软件打广告,硕 ...