OOP繼承

# 多繼承的例子
# 子類可以直接擁有父類的屬性和方法离唐,私有屬性和方法除外
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進行下下操作啦")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瑰枫,一起剝皮案震驚了整個濱河市踱葛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌光坝,老刑警劉巖尸诽,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盯另,居然都是意外死亡逊谋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門土铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胶滋,“玉大人,你說我怎么就攤上這事悲敷【啃簦” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵后德,是天一觀的道長部宿。 經(jīng)常有香客問我,道長瓢湃,這世上最難降的妖魔是什么理张? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮绵患,結(jié)果婚禮上雾叭,老公的妹妹穿的比我還像新娘。我一直安慰自己落蝙,他們只是感情好织狐,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布暂幼。 她就那樣靜靜地躺著,像睡著了一般移迫。 火紅的嫁衣襯著肌膚如雪旺嬉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天厨埋,我揣著相機與錄音邪媳,去河邊找鬼。 笑死荡陷,一個胖子當(dāng)著我的面吹牛悲酷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亲善,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼设易,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛹头?” 一聲冷哼從身側(cè)響起顿肺,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渣蜗,沒想到半個月后屠尊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡耕拷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年讼昆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骚烧。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡浸赫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赃绊,到底是詐尸還是另有隱情既峡,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布碧查,位于F島的核電站运敢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏忠售。R本人自食惡果不足惜传惠,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稻扬。 院中可真熱鬧卦方,春花似錦、人聲如沸腐螟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乐纸。三九已至衬廷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汽绢,已是汗流浹背吗跋。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宁昭,地道東北人跌宛。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像积仗,于是被迫代替她去往敵國和親疆拘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359