[Nginx]線上給nginx新增模組
阿新 • • 發佈:2021-11-20
目錄
一. 繼承(重要)
1.1 概念
-
什麼是繼承?
繼承就是新建類的一種方式,新建的類我們稱為子類或者叫派生類,被繼承的類我們稱為父類或者基類,子類可以使用父類中的屬性或者方法
-
為什麼要用繼承?
類解決了物件與物件之間的程式碼冗餘問題
繼承解決的是類與類之間的程式碼冗餘問題
-
如何使用繼承?
新式類:繼承了object類的子子孫孫類都是新式類
經典類:沒有繼承了object類的子子孫孫類都是經典類
ps:新式類和經典類只有在python2中區分
1.2 類的繼承
1.3 單繼承下屬性查詢
class Foo:
def f1(self):
print('Foo.f1')
def f2(self):
#
print('Foo.f2')
self.f1()
class Bar(Foo):
def f1(self):
print('Bar.f1')
obj = Bar() # {}
obj.f2()
練習:
class Foo: def __f1(self): # _Foo__f1() print('Foo.f1') def f2(self): print('Foo.f2') self.__f1() # _Foo__f1() class Bar(Foo): def __f1(self): # # _Bar__f1() print('Bar.f1') obj = Bar() obj.f2()
1.4 多繼承下的屬性查詢
bases用法:
print(類名加_ _ bases _ _) 是檢視該類所有的父類
# 新式類:按照廣度優先查詢 # 經典類:按照深度優先查詢 class A(object): def test(self): print('from A') class B(A): # def test(self): # print('from B') pass class C(A): # def test(self): # print('from C') pass class D(B): # def test(self): # print('from D') pass class E(C): # def test(self): # print('from E') pass class F(D, E): # def test(self): # print('from F') pass f1 = F() f1.test()
1.5 super()
作用:super( ) 是呼叫父類的屬性或方法
super()的應用場景:
子類可以派生出自己新的屬性,在進行屬性查詢時,子類中的屬性名會優先於父類被查詢,我們既想使用父類的屬性, 又想賦予子類新的屬性,這時就需要使用super().
查詢順序也遵循mro列表
1.5 mro列表(瞭解)
對於你定義的每一個類,Python都會計算出一個方法解析順序(MRO)列表,該MRO列表就是一個簡單的所有基類的線性順序列表,如下:
# mro列表練習2
class B:
def test(self):
print('B---->test')
def aaa(self):
print('B---->aaa')
class A:
def test(self):
print('A---->test')
super().aaa()
class C(A, B):
def aaa(self):
print('C----->aaa')
c = A()
# c.test() # 列印結果:
print(A.mro())
二. 多型與多型多樣性
1. 什麼是多型
水:液態水,固態水,氣態水
動物:人,豬,狗,貓 ...
# 抽象類: 抽象類只能被繼承,不能被例項化
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod # 該方法已經是抽象方法了
def speak(self): pass
@abc.abstractmethod
def login(self):pass
class People(Animal):
def speak(self):
# print('嗷嗷嗷')
pass
def login(self):
pass
class Pig(Animal):
def speak(self):
print('哼哼哼')
class Dog(Animal):
def speak(self):
print('汪汪汪')
obj = People()
obj.speak()
# 多型練習
class Pig():
def speak(self):
print('哼哼哼')
class Dog():
def speak(self):
print('汪汪汪')
class Txt():
def speak(self):
print('Txt')
obj = People()
obj1 = Pig()
obj2 = Dog()
obj3 = Txt()
# 多型帶來的特性:在不用考慮物件資料型別的情況下,直接呼叫對應的函式
def animal(animal):
return animal.speak()
animal(obj)
animal(obj1)
animal(obj2)
animal(obj3)
# 父類限制子類的行為
class Animal():
def speak(self):
raise Exception("必須實現speak方法")