# 多繼承的例子
# 子類可以直接擁有父類的屬性和方法离唐,私有屬性和方法除外
class Fish():
def __init__(self,name):
self.name = name
def swim(self):
print("i am swimming......")
class Bird():
def __init__(self, name):
self.name = name
def fly(self):
print("I am flying.....")
class Person():
def __init__(self, name):
self.name = name
def work(self):
print("Working........")
# 單繼承的例子
class Student(Person):
def __init__(self, name):
self.name = name
stu = Student("yueyue")
stu.work()
# 多繼承的例子
class SuperMan(Person, Bird, Fish):
def __init__(self, name):
self.name = name
class SwimMan(Person, Fish):
def __init__(self, name):
self.name = name
s = SuperMan("yueyue")
s.fly()
s.swim()
# 菱形繼承問題
class A():
pass
class B(A):
pass
class C(A):
pass
class D(B,C):
pass
# 構(gòu)造函數(shù)例子
class Person():
# 對Person類進行實例化的時候
# 姓名要確定
# 年齡得確定
# 地址肯定有
def __init__(self):
self.name = "NoNmae"
self.age = 18
self.address = "Studentwhonheim"
print("In init func")
# 實例化一個人
p = Person()
# 構(gòu)造函數(shù)的調(diào)用順序 - 1
# 如果子類沒有寫構(gòu)造函數(shù)炊豪,則自動向上查找呢袱,知道找到位置
class A():
def __init__(self):
print("A")
class B(A):
def __init__(self):
print("B")
class C(B):
pass
# 此時,首先查找C的構(gòu)造函數(shù)
# 如果沒有,則向上按照MRO順序查找父類的構(gòu)造函數(shù),知道找到為止
c = C()
# # 構(gòu)造函數(shù)的調(diào)用順序 - 2
class A():
def __init__(self):
print("A")
class B(A):
def __init__(self, name):
print("B")
print(name)
class C(B):
pass
# 此時,首先查找C的構(gòu)造函數(shù)
# 如果沒有怨绣,則向上按照MRO順序查找父類的構(gòu)造函數(shù)角溃,知道找到為止
# 此時拷获,會出現(xiàn)參數(shù)結(jié)構(gòu)不對應(yīng)錯誤
c = C()
# # 構(gòu)造函數(shù)的調(diào)用順序 - 3
class A():
def __init__(self):
print("A")
class B(A):
def __init__(self, name):
print("B")
print(name)
class C(B):
# c中想擴展B的構(gòu)造函數(shù),
# 即調(diào)用B的構(gòu)造函數(shù)后在添加一些功能
# 由兩種方法實現(xiàn)
'''
# 第一種是通過父類名調(diào)用
def __init__(self, name):
# 首先調(diào)用父類構(gòu)造函數(shù)
B.__init__(self, name)
# 其次减细,再增加自己的功能
print("這是C中附加的功能")
'''
# 第二種匆瓜,使用super調(diào)用
def __init__(self, name):
# 首先調(diào)用父類構(gòu)造函數(shù)
super(C, self).__init__(name)
# 其次,再增加自己的功能
print("這是C中附加的功能")
# 此時,首先查找C的構(gòu)造函數(shù)
# 如果沒有驮吱,則向上按照MRO順序查找父類的構(gòu)造函數(shù)茧妒,知道找到為止
# 此時,會出現(xiàn)參數(shù)結(jié)構(gòu)不對應(yīng)錯誤
c = C("我是C")
# Mixin案例
class Person():
name = "liuying"
age = 18
def eat(self):
print("EAT.......")
def drink(self):
print("DRINK......")
def sleep(self):
print("SLEEP.....")
class Teacher(Person):
def work(self):
print("Work")
class Student(Person):
def study(self):
print("Study")
class Tutor(Teacher, Student):
pass
t = Tutor()
print(Tutor.__mro__)
print(t.__dict__)
print(Tutor.__dict__)
print("*"*20)
class TeacherMixin():
def work(self):
print("Work")
class StudentMixin():
def study(self):
print("Study")
class TutorM(Person, TeacherMixin, StudentMixin):
pass
tt = TutorM()
print(TutorM.__mro__)
print(tt.__dict__)
print(TutorM.__dict__)
# issubclass
class A():
pass
class B(A):
pass
class C():
pass
print( issubclass(B, A))
print( issubclass(C, A))
print( issubclass(B, object))
# isinstance
class A():
pass
a = A()
print(isinstance(a, A))
print(isinstance(A, A))
# hasattr
class A():
name = "NoName"
a = A()
print(hasattr(a, "name" ))
print(hasattr(a, "age" ))
# 屬性案例
# 創(chuàng)建Student類左冬,描述學(xué)生類
# 學(xué)生具有Student.name屬性
# 但name格式并不統(tǒng)一
# 可以用增加一個函數(shù)桐筏,然后自動調(diào)用的方式,但很蠢
class Student():
def __init__(self, name, age):
self.name = name
self.age = age
# 如果不想修改代碼
self.setName(name)
# 介紹下自己
def intro(self):
print("Hai, my name is {0}".format(self.name))
def setName(self, name):
self.name = name.upper()
s1 = Student("LIU Ying", 19.8)
s2 = Student("michi stangle", 24.0)
s1.intro()
s2.intro()
# peroperty案例
# 定義一個Person類拇砰,具有name梅忌,age屬性
# 對于任意輸入的姓名,我們希望都用大寫方式保存
# 年齡除破,我們希望內(nèi)部統(tǒng)一用整數(shù)保存
# x = property(fget, fset, fdel, doc)
class Person():
'''
這是一個人牧氮,一個高尚的人,一個脫離了低級趣味的人
他還他媽的有屬性
'''
# 函數(shù)的名稱可以任意
def fget(self):
return self._name * 2
def fset(self, name):
# 所有輸入的姓名以大寫形式保存
self._name = name.upper()
def fdel(self):
self._name = "NoName"
name = property(fget, fset, fdel, "對name進行下下操作啦")
OOP繼承
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門土铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胶滋,“玉大人,你說我怎么就攤上這事悲敷【啃簦” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵后德,是天一觀的道長部宿。 經(jīng)常有香客問我,道長瓢湃,這世上最難降的妖魔是什么理张? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮绵患,結(jié)果婚禮上雾叭,老公的妹妹穿的比我還像新娘。我一直安慰自己落蝙,他們只是感情好织狐,可當(dāng)我...
- 文/花漫 我一把揭開白布暂幼。 她就那樣靜靜地躺著,像睡著了一般移迫。 火紅的嫁衣襯著肌膚如雪旺嬉。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼设易,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛹头?” 一聲冷哼從身側(cè)響起顿肺,我...
- 正文 年R本政府宣布碧查,位于F島的核電站运敢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏忠售。R本人自食惡果不足惜传惠,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稻扬。 院中可真熱鬧卦方,春花似錦、人聲如沸腐螟。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽乐纸。三九已至衬廷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汽绢,已是汗流浹背吗跋。 一陣腳步聲響...