python 進(jìn)階 面向?qū)ο螅ㄒ唬?/h1>
  • 函數(shù)式編程
    里面的函數(shù)是模塊里的成員
    def fetch(backend):
        pass
    def add_record(backend, record):
        pass
    # 調(diào)用
    fetch("xxxx")
    add_record("aaaa", xxx)
    
  • 面向?qū)ο?br> 里面的方法是類的成員
    class Mydemo:
        def fetch(self, backend):
            pass
        def add_record(self, backend, record):
            pass
    # 創(chuàng)建對(duì)象、實(shí)例 
    obj = Mydemo()
    # 調(diào)用
    obj.fetch("xxx")
    obj.add_record("aa", xxx)
    
  • tips: 面向?qū)ο蟛皇撬星闆r都適用
  • self, 形式參數(shù)。python內(nèi)部傳遞
    obj1 = Mydemo() 
    obj1.fetch("xx") ==> self : obj1, backend : xx
    obj2 = Mydemo("xxx") ==> self : obj2, backend : xxx
    
  • 封裝的非主流方式
    class Mydemo:
        def fetch(self):
            print(self.backend)
        def add_record(self, record):
            pass
    # 創(chuàng)建對(duì)象、實(shí)例
    obj1 = Mydemo()
    # 在對(duì)象中封裝數(shù)據(jù),非主流的方式
    obj1.backend = "www.xinmin.org"
    # 執(zhí)行方法,執(zhí)行過程中可以根據(jù)self去obj1中去取已封裝在里面的數(shù)據(jù)
    obj1.fetch() # www.xinmin.org
    
    obj2 = Mydemo()
    obj2.backend = "www.aaaa.org"
    obj1.fetch() # www.aaaa.org
    
  • 封裝的主流方式
    class Foo:
         # 構(gòu)造方法,創(chuàng)建對(duì)象的時(shí)候自動(dòng)執(zhí)行
         def __init__(self, bk):
             self.name = "xinmin"
             self.favor = bk
    # 創(chuàng)建對(duì)象,并且將"xx"封裝到對(duì)象中
    obj1 = Foo("xx")
    obj2 = Foo("oo")
    # ========================================
    class Person:
        def __init__(self, name, age, weight):
            self.name = name
            self.age = age
            self.weight = weight
        def eat(self):
            self.weight += 2
        def sports(self):
            self.weight -= 1
    # 創(chuàng)建對(duì)象
    o1 = Person("小明", 20, 200)
    o1.eat()
    o1.sports()
    print(o1.weight) # 201
    
  • 封裝:
    使用場(chǎng)景:當(dāng)同一類型的方法具有相同參數(shù)時(shí),直接封裝到對(duì)象即可。
    使用場(chǎng)景:把類當(dāng)做模板,創(chuàng)建對(duì)個(gè)對(duì)象(對(duì)象內(nèi)封裝的數(shù)據(jù)可以不一樣)
  • 繼承:
    派生類可以繼承基類中所有的功能
    派生類和基類同時(shí)存在某個(gè)功能時(shí),優(yōu)先找派生類(自己)
    python類可以同時(shí)繼承多個(gè)類,多繼承(優(yōu)先級(jí):從左向右找
    # 父類(基類)
    class Animals:
         def __init__(self, name):
             self.name = name
         def eat(self):
             print(self.name +  "吃")
         def drink(self):
             print(self.name + "喝")
    
    class Uncle:
         def sleep(self):
             print(self.name + "睡覺")
         def eat(self):
             print(self.name + "吃狗糧")
    
    # 子類(派生類)
    class Dog(Animals, Uncle):
         def speak(self):
             print(self.name + "汪汪汪")
         def drink(self):
            print(self.name + "喝牛犇犇")
    
    # 創(chuàng)建對(duì)象,調(diào)用方法
    mm = Dog("二哈")
    mm.eat() # 二哈 吃
    mm.drink()  # 二哈 喝牛犇犇
    mm.speak()  # 二哈 汪汪汪
    mm.sleep()    # 二哈 睡覺
    
  • 多繼承經(jīng)典題
    class X(Object):
         def f1(self):
             print("X")
    
    class A(X):
         def f(self):
             print("A")
    
    class B(X):
         def f1(self):
             print("B")
    
    class C(A):
         def f(self):
             print("C")
    
    class D(B):
         def f1(self):
             print("D")
    
    class E(C, D):
         def f(self):
             print("E")
    
    obj = E()
    obj.f1() # D
    # 繼承的尋找順序:E -> C -> A -> D -> B -> X
    
  • 多態(tài)
    多種形態(tài)
  • 擴(kuò)展
    重載,函數(shù)名相同,參數(shù)個(gè)數(shù)不同(python不支持)
    重寫,派生類中實(shí)現(xiàn)基類中的方法
    class Foo:
        def f1(self):
            print("Foo")
    class Bar:
         def f1(self):
             print("Bar")
    def func(arg):
        arg.f1()
    # python 本身支持多態(tài)
    func(Foo())
    func(Bar())
    
  • 繼承補(bǔ)充
    class A:
         def bar(self):
             print("BAR")
             self.f1()
         def f1(self):
             print("A")
    
    class B(A):
         def f1(self):
             print("B")
    
    class C:
         def f1(self):
             print("C") 
    
    class D(C, B):
         def f1(self):
             pass
    
    d1 = D()
    d1.bar() 
    # BAR      D -> C -> B -> A
    # C        self.f1() -> D -> C -> B -> A
    
  • 執(zhí)行基類的構(gòu)造方法
    class Annimal:
         def __init__(self):
             print("Annimal的構(gòu)造方法")
             self.ty = "動(dòng)物"
    
    class Cat(Annimal):
         def __init__(self):
             print("Cat的構(gòu)造方法")
             self.n = "喵"
             # 執(zhí)行父類的構(gòu)造方法
             super(Cat, self).__init__()
             # 還可使用,但不推薦
             # Annimal.__init__(self)
    
    # __init__()構(gòu)造方法,類加入括號(hào)自動(dòng)執(zhí)行
    # 對(duì)數(shù)據(jù)進(jìn)行初始化
    
    c = Cat()
    print(c.__dict__) # {'ty': '動(dòng)物', 'n': '喵'}
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 這周我干了很多事都很有趣比如晨跑時(shí)看見了蛇!讓我們?cè)僭敿?xì)回顧吧! 在這一周里我除了寫作業(yè)之外,還做了其他很多運(yùn)動(dòng)比...
    小溪流10李騰木閱讀 234評(píng)論 0 3
  • 學(xué)習(xí)累了,一回家就撲倒琴上彈起來(lái)。舒緩的琴聲既撫慰自己,又益于他人。 沒有良好嗜好的會(huì)做什么?葛優(yōu)癱?麻將?抽煙?...
    Faithchu閱讀 299評(píng)論 0 0
  • NSEnumerator ①依附于集合類(NSArray,NSSet,NSDictionary),沒有用來(lái)創(chuàng)建實(shí)例...
    楚簡(jiǎn)約閱讀 582評(píng)論 0 1
  • 借著時(shí)間縫隙讀完了《鄭爽的書》,我本是個(gè)對(duì)任何事物都沒有強(qiáng)烈興趣的人,更不會(huì)發(fā)狂的去追星,如果你問我,喜歡哪...
    小蜜蜂666閱讀 337評(píng)論 0 0