Day7 类的继承和继承实现的原理
继承可以分为但继承,多继承。
继承的基本形式
class ParentClass1(object): #定义父类
pass class ParentClass2: #定义父类
pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
pass class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
pass print(SubClass1.__bases__) #显示他继承了几类
print(SubClass2.__bases__)
print(ParentClass1.__bases__)
经典类和新式类:
两者区别在python3中是没有区别的,都有有个继承,如果没定义继承,也会默认将object继承,都叫新式类。
两者的区别在python2才有区别,没有定义就是经典类,如果定义了继承就是新式类。
class Animal:
x=1
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
# print('Animal.__init__')
def eat(self):
print('%s eat' %self.name) def talk(self):
print('%s say' %self.name) class People(Animal):
x=10
def __init__(self,name,age,sex,education):
Animal.__init__(self,name,age,sex)
self.education=education
# print('People.__init__') def talk(self):
Animal.talk(self)
print('这是人在说话') class Dog(Animal):
pass
class Pig(Animal):
pass peo1=People('alex',18,'male','小学肄业')
print(peo1.__dict__)
peo1.talk()
print(peo1.x) dog1=Dog('yuanhao',28,'male')
pig1=Pig('wupeiqi',18,'male') print(peo1.name)
print(dog1.name)
print(pig1.name)
类的继承:
class OldboyPeople:
school = 'oldboy'
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex def eat(self):
print('is eating') class OldboyStudent(OldboyPeople):
def learn(self):
print('%s is learning' %self.name) class OldboyTeacher(OldboyPeople):
def __init__(self,name,age,sex,salary,title):
OldboyPeople.__init__(self,name,age,sex)
self.salary=salary
self.title=title def teach(self):
print('%s is teaching' %self.name) yl_obj=OldboyStudent('yanglei',28,'female')
egon_obj=OldboyTeacher('egon',18,'male',3.1,'沙河霸道金牌讲师')
总结;
1,继承功能之一:解决类与类之间代码重复
2,继承是类与类之间的关系,是一种,什么是什么的关系
3,在子类派生出新的属性,以自己的为准。
4,在子类派生出新的方法内重用弗雷的功能的方式:指名道姓
eg:OldboyPeople.__init__
这种调用方法本身跟继承没有关系
继承实现的原理:
调用顺序:
单继承的话:如果执行的话先找自己的范围内,当没有的时候再去找父类。(就是不管怎么找,都是先从自身找齐)
#单继承
class A:
def f1(self):
print('A.f1') def f2(self):
print('A.f2')
self.f1() #b.f1() class B(A):
def f1(self):
print('B.f2') b=B()
# b.f2=111111
b.f2()
多继承的话:
#多继承
class J:
def test(self):
print('J')
class A(J):
# def test(self):
# print('A')
pass
class E(J):
def test(self):
print('E')
pass
class H(J):
def test(self):
print('H') class G(H):
def test(self):
print('G')
pass
class B(A):
# def test(self):
# print('B')
pass
class D(E):
def test(self):
print('D')
pass
class F(G):
def test(self):
print('F')
pass
class C(B,D,F):
# def test(self):
# print('C')
pass c=C()
# c.test=1111
c.test()
#可以利用*.mro()来查看他的调用顺序
eg: print(c.mro())
Day7 类的继承和继承实现的原理的更多相关文章
- scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- ECMAScript6 中 类的封装与继承
ECMASCRIPT6中实现了class关键字,这样使我们更容易也更形象的进行类的操作 <script type="text/javascript"> class OF ...
- iOS 杂笔-24(常用类到NSObject的继承列表)
iOS 杂笔-24(常用类到NSObject的继承列表) NSString NSObject->NSString NSArray NSObject->NSArray ↑OC基本类都直接继承 ...
- scala入门教程:scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- java类为什么是单继承。类的继承,实现接口。
java中提供类与类之间提供单继承. 提供多继承会可能出现错误,如:一个类继承了两个父类,而两个父类里面都有show()方法. class Fulei1{ public void show(){ Sy ...
- JAVA类与对象(七)------继承
理解:继承可以理解为一个对象获取属性的过程.如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来. 在java中,类的继承是单一继承,也就是说,一个子类只能拥有一 ...
- java中关于类的封装与继承,this、super关键字的使用
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...
- 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法
实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...
- 类和对象:继承 - 零基础入门学习Python038
类和对象:继承 让编程改变世界 Change the world by program 上节课的课后作业不知道大家完成的怎样?我们试图模拟一个场景,里边有一只乌龟和十条鱼,乌龟通过吃鱼来补充体力,当乌 ...
随机推荐
- 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 : -- u-boo ...
- 【Unity技巧】制作一个简单的NPC
1. 写在前面 前几天看了cgcookie的一个教程,学习了下怎么根据已有人物模型制作一个仿版的NPC人物,感觉挺好玩的,整理一下放到博客里! 先看一下教程里面的最终效果. 是不是很像个幽灵~ 下面是 ...
- Socket编程实践(10) --select的限制与poll的使用
select的限制 用select实现的并发服务器,能达到的并发数一般受两方面限制: 1)一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n(number)来调整或 ...
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定 ...
- 手机广告投放(phone advertising)唯一标识
手机标示,为了识别用户,方面advertising. 使用设备id,相当于暴露用户隐私.慢慢已不允许使用.. (长时间跟踪用户无异于暴露用户隐私,虽然大量数据适合兴趣建模,广告个性化推荐.但复杂多样会 ...
- org.apache.poi.ss.usermodel 类操作excel数据遗漏
直接上图. 错误程序: 循环读取每一行的单元格数据部分 //for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) ...
- Spring揭秘 读书笔记 五 容器的启动
Spring的IoC容器所起的作用,就是生产bean,并维持bean间的依赖关系.它会以某种方式加载Configuration Metadata(通常也就是XML格式的配置信息),然后根据这些信息绑定 ...
- iOS开发支付集成之微信支付
这一篇是<iOS开发之支付>这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付.在集成的时候建议都要去下载最新版的SDK,因为我知道的前不久支付宝,银联都更新了一次,微信的不太清楚更 ...
- Java进阶(五十一)Could not create the view: An unexpected exception was thrown
Java进阶(五十一)Could not create the view: An unexpected exception was thrown 今天打开Myeclipse10的时候,发现server ...
- Ext JS 5 beta版发布
原文:Announcing Public Beta of Ext JS 5 我们非常高兴的宣布,Sencha Ext JS 5 beta版本开始进行公测了.这个beta版本可以让你.我们Sencha社 ...