- 函數(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': '喵'}