继承可以分为但继承,多继承。

 继承的基本形式
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 类的继承和继承实现的原理的更多相关文章

  1. scala中的面向对象定义类,构造函数,继承

    我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...

  2. ECMAScript6 中 类的封装与继承

    ECMASCRIPT6中实现了class关键字,这样使我们更容易也更形象的进行类的操作 <script type="text/javascript"> class OF ...

  3. iOS 杂笔-24(常用类到NSObject的继承列表)

    iOS 杂笔-24(常用类到NSObject的继承列表) NSString NSObject->NSString NSArray NSObject->NSArray ↑OC基本类都直接继承 ...

  4. scala入门教程:scala中的面向对象定义类,构造函数,继承

    我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...

  5. java类为什么是单继承。类的继承,实现接口。

    java中提供类与类之间提供单继承. 提供多继承会可能出现错误,如:一个类继承了两个父类,而两个父类里面都有show()方法. class Fulei1{ public void show(){ Sy ...

  6. JAVA类与对象(七)------继承

    理解:继承可以理解为一个对象获取属性的过程.如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来.    在java中,类的继承是单一继承,也就是说,一个子类只能拥有一 ...

  7. java中关于类的封装与继承,this、super关键字的使用

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...

  8. 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法

    实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...

  9. 类和对象:继承 - 零基础入门学习Python038

    类和对象:继承 让编程改变世界 Change the world by program 上节课的课后作业不知道大家完成的怎样?我们试图模拟一个场景,里边有一只乌龟和十条鱼,乌龟通过吃鱼来补充体力,当乌 ...

随机推荐

  1. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  2. java加载外部文件数据到代码中:外部数据文件放到jar包中,调用方法getResourceAsStream

    任务要将数据文件geo.txt加载进行.因为是别人写的总体项目,不能乱动位置.只能将geo.txt打包到jar中某目录.比如,放到.class文件下怎么加载:http://riddickbryant. ...

  3. Android:android sdk源码中怎么没有httpclient的源码了

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 今天想使用这个API,怎么也找不到.废了好多时间... 查阅资料才知道如下解释: 在android 6.0(API 23)中,G ...

  4. A*寻路算法入门(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  5. Mybatis源码之Statement处理器CallableStatementHandler(六)

    CallableStatementHandler实际就是使用CallableStatement来执行SQL语句,当然它执行的是存储过程. 源码如下: /** * @author Clinton Beg ...

  6. UNIX环境高级编程——标准I/O库缓冲区和内核缓冲区的区别

    1.C标准库的I/O缓冲区         UNIX的传统 是Everything is a file,键盘.显示器.串口.磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可 ...

  7. 一个大数据方案:基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

    网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...

  8. Zookeeper运维

    一.运维配置         参考:http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html#sc_configuration 基础配置   ...

  9. 视音频编解码学习工程:FLV封装格式分析器

    ===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

  10. ios入门OC_UI晋级学什么?

    1. OC 语法初步, 你可能学到面向对象最近本的概念, 并且可以大致的建立几个自以为是的类,但这仅仅是开始. 你知道为什么面向对象要有3大特性么.知道他们是用到什么设计模式的么 2. 你可能学到了N ...