#!/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)