Python 多重继承

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

class person(object):

def __init__(self, name):

self.name = name  # 静态属性

def say(self):  # 方法,动态属性

print("say...")

def speak(self):

print("speak...")

class relationship:

def mk_friends(self, somebody):

print("%s is making friends with %s." % (self.name, somebody.name))

‘‘‘这里somebody(类)做为参数,保证了某个人更名后仍是新名字,因为修改实例的属性是去修改对应的内存数据‘‘‘

self.friends.append(somebody)  # 给自己的朋友列表里添加新交的朋友,暂不考虑重复交朋友问题

somebody.friends.append(self)  # 对方的朋友列表里添加新交的朋友

‘‘‘

多重继承时,实例化时,优先寻找子类的构造方法,如无则按照从左往右的顺序依次寻找父类的构造方法,

寻找到第一个构造方法后就不再寻找后面父类的构造方法,多重继承时推荐使用super关键继承父类构造。

class E:

#经典类

pass

class E1(object):

#新式类

pass

有如下继承方式:类A继承object,类B、C继承A,类D多继承B、C

py2中,经典类按照深度优先继承,新式类按照广度优先继承;

py3中,经典类和新式类都按照广度优先继承。

Py2中默认都是经典类,只有显式继承了object才是新式类

Py3中默认都是新式类,不必显式的继承object?

‘‘‘

class man(relationship, person):

def __init__(self, name, age):  # 这里重写构造方法,不重写则继承父类的构造方法

#person.__init__(self, name)  # 继承父类的构造方法

super(man, self).__init__(name)   # 继承父类的构造方法,另一种写法, 注意self的位置,多重继承时推荐这种写法

self.age = age

self.friends = []

def say(self):

person.say(self)  # 继承父类的方法,当然可以注释掉,不继承父类的方法

print("say hello...%s" % (self.name))

print("say hello...%s" % (self.age))

p1 = man("daidai", 23)

p1.name = "new boy"

p1.say()

p2 = man("xiongxiong", 18)

p2.name = "new girl"

p1.mk_friends(p2)

print("daidai`s friend is %s." % p1.friends[0].name)

print("xiongxoing`s friend is %s." % p2.friends[0].name)

时间: 2024-12-31 21:36:25

Python 多重继承的相关文章

Python多重继承用法 Python周末学习

Python多重继承用法 Python周末学习 继承是面向对象编程的一个重要方式,通过继承,子类可以扩展父类的功能,Python也具有该特性,除此之外,Python还可以使用多重继承. 语法: class subClass(Base1,Base2) 该语法的含义是创建了一个subClass类,让它同时继承了Base1和Base2的相关特性,关于继承还有以下规则需要遵循: 1. 继承只会继承父类的方法,不能继承父类的变量: 2. 要想继承父类的变量,需要执行父类的__init__(self)方法:

Python多重继承引发的问题——牛逼的super

少说废话多做事先上一个图,此图用win7下的画图工具所画,当然,这不是重点 需要清楚的一个事情是: 任何类,都默认并隐式的继承object类(根类),在上面的图中,Transformers类同时继承了Car和Ship类.那么Car和Ship又隐式的继承了object类,注意,这个object类不是我自己定义的 而是python的. 根据上面的图,编写代码 class Car:     #描述汽车     call_car_record = 0 #记录调用次数     def __init__(s

python多重继承之拓扑排序

在python3中,所有类都是新式类(默认继承obj,具有super,mro方法),采用广度优先,即拓扑排序算法 在python2.7中,新式类和经典类并存,经典类采用深度优先算法,即纵向 super方法本质,不是单纯找父类,而是根据调用者的节点位置进行广度优先顺序来的 一.什么是拓扑排序 在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列.且该序列必须满足下面两个条件: 每个顶点出现且只

转载 python多重继承C3算法

备注:O==object 2.python-C3算法解析: #C3 定义引用开始 C3 算法:MRO是一个有序列表L,在类被创建时就计算出来. L(Child(Base1,Base2)) = [ Child + merge( L(Base1) ,  L(Base2) ,  Base1Base2 )] L(object) = [ object ] L的性质:结果为列表,列表中至少有一个元素即类自己. 例如: L(D) = L(D(O)) = D + merge(L(O)) = D + O = [D

python多重继承

#-*-coding:utf-8-*-'''多重继承''' class MyFather: def __init__(self): self.eyes = '爸爸的眼睛是双眼皮' print(self.eyes)class MyMother: def __init__(self): self.forehead = '妈妈的额头有点宽' print(self.forehead)class MyAunt: def __init__(self): self.nose='姑姑的鼻子是高鼻梁' print

python多重继承的属性和方法调用顺序问题和对迭代器的初步理解

推荐阅读:https://www.cnblogs.com/bigb/p/11650707.html 计算机学习的一个好办法就是自己将代码跑一遍,了解代码的运作顺序和原理(主要弄懂 函数作用,传入参数,返回值) 见代码: class A(object): def __init__(self): print('A') super(A, self).__init__() class B(object): def __init__(self): print('B') super(B, self).__i

python基础整理笔记(七)

一. python的类属性与实例属性的注意点 1 class TestAtt(): 2 aaa = 10 3 4 def main(): 5 # case 1 6 obj1 = TestAtt() 7 obj2 = TestAtt() 8 print obj1.aaa, obj2.aaa, TestAtt.aaa 9 10 # case 2 11 obj1.aaa += 1 12 print obj1.aaa, obj2.aaa, TestAtt.aaa 13 14 # case 3 15 Te

python学习第十六天 --继承进阶篇

这一章节主要讲解面向对象高级编程->继承进阶篇,包括类多继承介绍和继承经典类和新式类属性的查找顺序不同之处. 多继承 上一章节我们讲到继承,子类继承父类,可以拥有父类的属性和方法,也可以进行扩展.但是有时候会发现,子类需要继承一个类的方法,又要继承另一个类的方法,才能完成要实现的功能.怎么办?python给我们提供了多继承的概念.类似于C++语言,俗称类的多继承. 看个例子: >>> class Animal(object): def __init__(self,name): se

day06 - Python - 面向对象

本节内容: 引子 面向对象 v.s. 面向过程 面向对象编程介绍 面向对象的特性: 封装 继承 多态 类.方法 1.引子 假设你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色: def person(name,age,sex,job): data = {