首页 > 代码库 > Python 多重继承

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)


本文出自 “90SirDB” 博客,请务必保留此出处http://90sirdb.blog.51cto.com/8713279/1921756

Python 多重继承