1. 程式人生 > >Python 多重繼承

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