单继承:
# class People: 经典类
class People(object): #新式类
def __init__(self,name,age,n=1000):
self.name = name
self.age = age
self.n = n
print("--doens't run ")
def eat(self):
print("%s is eating..." % self.name)
def talk(self):
print("%s is talking..." % self.name)
def sleep(self):
print("%s is sleeping..." % self.name) class Man(People):
def __init__(self,name,age,money,n=999): #重构父类初始化方法 #父类的默认参数n 可以不写;调用父类的n
#People.__init__(self,name,age) #经典类写法 和下面super这行代码的效果一样
super(Man,self).__init__(name,age) #新式类写法 #调用父类的初始化方法,默认参数n可以不写
self.n = n #如果这行不写,也就是不给Man类实例的n属性赋值,默认还是父类n的值
self.money = money #Man类实例自己的一个属性money,不是继承父类的
print("%s 一出生就有%s money" %(self.name,self.money))
def sleep(self):
People.sleep(self)
print("man is sleeping ") m1 = Man("NiuHanYang",22,10)
print(m1.n)
------------------------------------------------------------
多继承:
# class People: 经典类
class People(object): #新式类
def __init__(self,name,age):
self.name = name
self.age = age
self.friends = []
print("--doens't run ")
def sleep(self):
print("%s is sleeping..." % self.name) class Relation(object):
# def __init__(self,n1,n2):
# print("init in relation")
def make_friends(self,obj): #obj 传递的是实例
print("%s is making friends with %s" % (self.name,obj.name))
self.friends.append(obj) #obj存储的是一个实例的地址,friends 指向那个实例的地址,这样不管实例中数据如何更改,friends都是读取的是实例中的数据 #不要append(obj.name) 因为这样存的是一个字符串,如果内存中obj.name更改了, friends列表没有更改,这样数据都不一致了; class Man(Relation,People): #继承多个类 #Relation和People 实例初始化的时候只会调用第一个Relation类的初始化方法,如果第一个Relation类中没有初始化方法才会找People的__init__初始化方法,按照继承的顺序找的
def __init__(self,name,age,money):
# People.__init__(self,name,age) #经典类写法 #指定调用People的初始化方法
super(Man,self).__init__(name,age) #新式类写法 #这样写只会调用Relation的__init__初始化函数,
self.money = money
print("%s 一出生就有%s money" %(self.name,self.money))
def sleep(self):
People.sleep(self)
print("man is sleeping ")
class Woman(People,Relation):
def get_birth(self):
print("%s is born a baby...." % self.name)
m1 = Man("NiuHanYang",22,10)    #先执行Relation的__init__初始化函数,再执行Man自己的__init__初始化函数,不执行People的__init__初始化函数, 如果没有初始化函数跳过不执行;
                   #如果第一个Relation类中没有初始化方法才会找People的__init__初始化方法,按照继承的顺序找的
w1 = Woman("ChenRonghua",26)
m1.make_friends(w1)
w1.name = "陈三炮"
# print(m1.friends[0])
print(m1.friends[0].name)
print(m1.friends[0].age)
m1.make_friends(w1)
------------------------------------------------------------
super初始化说明:
class A(object):
def __init__(self,name):
self.name_1 = name
pass
class B(object):
def __init__(self,name):
self.name = name class C (A,B): #先继承A,然后再继承B
def __init__(self,name):
super(C,self).__init__(name) d = C('alex')
print(d.name_1) #输出alex
# print(d.name) # 报错:'C'对象没有属性'name'
#继承多个类,按照继承顺序(从左到右)调用第一个类的_init__初始化方法,第一个类没有初始化方法会找第二个类的初始化方法,依次类推;不仅仅是初始化方法,别的方法实例调用也是一样的;
super类功能:新式类实现广度优先的不重复的调用父类,解决了钻石继承(多继承)的难题
------------------------------------------------------------
class A(object):       #新式类
#class A: #经典类
def __init__(self):
print("A")
class B(A):
pass
# def __init__(self):
# print("B")
class C(A):
pass
def __init__(self):
print("C")
class D(B,C):
pass
# def __init__(self):
# print("D") obj = D()

继承
py2 经典类是按深度优先来继承的,新式类是按广度优先来继承的
py3 经典类和新式类都是统一按广度优先来继承的

广度优先查找顺序是D->B->C->A;深度优先查找顺序是D->B->A-C; 广度优先 是 横向查找B没有查找B同级的C,深度优先 是 纵向查找B没有查找B的父类A;

注意:是所有方法,不仅仅是初始化方法;

新式类,经典类主要区别是在多继承;

参考:
https://www.cnblogs.com/attitudeY/p/6789370.html
https://www.cnblogs.com/xinghuaikang/p/8481712.html

CLASS类继承的更多相关文章

  1. javascript类继承的一些实验

    其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话 ...

  2. C++ 类继承的对象布局

    C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表.成员声明先后顺序排列).该类情况为子类按照继承顺序排列,如c ...

  3. C++中public,protected,private派生类继承问题和访问权限问题

    C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...

  4. Javascript类继承-机制-代码Demo【原创】

    最近看到<Javascript设计模式>,对js模拟的”继承方式“有了更深一步的了解,虽然之前也总是用到prototype.new ,但只是知其然不知所以然,现在将类继承的方法整理如下,暂 ...

  5. smartjs 0.2 OOP讲解 - Klass 类继承

    SmartJS2.0加入OOP的功能.OOP包括klass与factory两个对象. Klass 类继承 与其他的类继承相比,smartjs使用了执行指针的概念(后面例子中会介绍),另外提供base基 ...

  6. C++——类继承

    类库:类库由类声明和实现构成.类组合了数据表示和类方法,因此提供了比函数库更加完整的程序包. 类继承:从已有的类派生出新的类,派生类继承了原有类(称为基类)的特征,包括方法. 通过类继承可以完成的工作 ...

  7. cocos2dx中常见的类及类继承关系

    场景:CCScene,继承自CCNode,几乎完全等于CCNode类 CCNode继承自CCObject,CCObject是真正意义上的父类,CCObject又继承自CCCopying类,CCCopy ...

  8. C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类

    类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...

  9. Android(java)学习笔记118:类继承的注意事项

    /* 继承的注意事项: A:子类只能继承父类所有非私有的成员(成员方法和成员变量) B:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法. C:不要为了部分功能而去 ...

  10. Lua类和类继承实现

    Lua本身是不能像C++那样直接实现继承,但我们可以用万能的table表来实现. 以下我总结了三种方式的类以及继承的实现 第一.官方的做法,使用元表实现 原理参照<Programming in ...

随机推荐

  1. 关于MDN,HTML入门来自MDN文档

    由开发者和作者组成的开源社区:推动web发展, MDN(Mozilla Developer Network) 维基,共同维护做贡献: 需要使用到github账号进行验证,以此再创建MDN账号: HTM ...

  2. js中级6

    1.动画 (1)Css样式提供了运动 过渡属性transition  从一种情况到另一种情况叫过渡 transition:time          linear                 de ...

  3. 汇编入门——使用DOSBox写一个HelloWorld以及相关软件安装

    0.0.0) 在D盘建立一个ASM文件夹 0.0.1) 放入所需要的文件 1所标示的红色框为必须要存在的文件,要处理汇编文件.百度网盘中下载. 2自己编写的汇编(asm)文件. 3编译汇编自己生成的文 ...

  4. 如何将WORD表格转换成EXCEL表格

    WORD和EXCEL都可以制作表格,但WORD表格与EXCEL表格之间有着很明显的差距,所以在办公中经常会需要将WORD转换成EXCEL,今天小编就教大家一招将WORD表格转换成EXCEL表格. 操作 ...

  5. 织梦手机站下一篇变上一篇而且还出错Request Error!

    最新的织梦dedecms程序手机版下一篇变上一篇而且还出错Request Error!,这是因为官方写错了一个地方 打开 /include/arc.archives.class.php 找到 $mli ...

  6. chrome浏览器另存为/上传附件崩溃

    x 前言 系统中有一个需要上传导入的功能,此功能在谷歌浏览器上传总是直接崩溃, 但是在火狐浏览器中就是好的. 自己想到的解决方案 谷歌浏览器版本号得问题?自己系统得问题? 谷歌浏览器卸载重新安装,还是 ...

  7. Jmeter设置默认中文页面

    方法一(从网上看到的) 启动Jmeter找到 options >choose language >chinese(简体繁体自己选). 这样设置后界面就变成了中文,但是当我们下次打开时又恢复 ...

  8. scrapy爬虫框架和selenium的配合使用

    scrapy框架的请求流程 scrapy框架? Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架.因此Scrapy使用了一种非阻塞(又名异步)的 ...

  9. python 判断字符串是否为(或包含)IP地址

    下面是某个字符串是否为IP地址import re def isIP(str): p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5 ...

  10. React之ref

    作为响应式开发框架React,我们知道他是数据驱动的,但有时候避免不了还是得动用到DOM操作,这个时候我们就可以用到ref:用法如下: 然后这样做有个弊端,当一个 ul 下面的 li 是动态添加的时候 ...