Python 多重繼承

#!/usr/bin/env pythonpython

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

# author: Changhua Gongide


class person(object):繼承

    def __init__(self, name):ip

        self.name = name  # 靜態屬性內存


    def say(self):  # 方法,動態屬性utf-8

        print("say...")it


    def speak(self):io

        print("speak...")class



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)

相關文章
相關標籤/搜索