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 多重繼承