Python全棧的知識點(3)
阿新 • • 發佈:2018-11-07
Python類: 1. 如果一類自己或基類中指定了metaclass,那麼該類就是由metaclass指定的type或mytype建立。 2. metaclass作用是指定當前類由誰來建立。 - 原始碼 如果類以基類中未指定metaclass: - __new__ - __init__ 如果類以基類中指定metaclass: - 建立類 MyType.__init__ 1.步生成類 - 建立物件 MyType.__call__ 2.步建立物件 - __new__ 3.生成物件 - __init__ 3. 類建立 a.- class Foo(object):pass b.- Foo = type('Foo',(object,),{靜態欄位或者方法}) c.- 執行自定義的mytype class Foo(metaclass=MyType): # __metaclass__ = MyType --> python2 pass4. 談談你對面向物件的認識? 父類/子類 <--> 基類/派生類 - 基礎:談面向物件就要從他的三大特性開始說起,如:封裝、繼承、多型。 1.封裝: a.功能封裝,相同的功能封裝到一個類 b.資料封裝,面向同一個類別(比如人),不同的資料也可以封裝進類中 2.繼承 a.有共同方法時,可把此方法封裝到父類,避免重複編寫(子類繼承即可) 3.多型(鴨子模型):Python原生支援多型 a.對於引數來說可以傳入任何型別的物件,只要保證有想要的相同方法(send)即可。def (*args): args.send() 5. 進階: __init__,初始化 __new__,建立物件 __call__,物件() __getattr__,物件.xx __setattr__ __delattr__ __setitem__,物件['xx'] __getitem__ __delitem__ __mro__,查詢成員順序 __enter__起始 <--> __exit__結束 --》with語句 __str__ 返回字串 __repr__ 返回整潔形式 __iter__,迭代 __dict__, 返回字典資料型別 __add__,一個物件加一個物件 6. 令你印象深刻的事(好神奇)。 obj._Foo__name 可以獲取當前類中私有屬性。生成例項物件,呼叫_類__name 7. 類的約束: - 繼承+丟擲異常 (*) class Base(object): def send(self): raise NotImplementedError('子類中必須實現send方法') import abc class Base(metaclass=abc.ABCMeta): @abc.abstractmethod def send(self):pass ('子類中必須實現send方法') 8. classmethod,staticmethod,property classmethod:類方法,將類的函式轉換成類方法,函式上裝飾@classmethod會將函式的自動傳值引數改成cls。 staticmethod:靜態方法,此方法相當於給類擴充套件一個功能,將類內的函式例項化,給類或物件使用,此時類內的函式就是普通函式,不管是類還是例項化的物件都可以使用。 property:例項化,類的例項化就會產生一個例項(物件),可以理解為類把虛擬的東西例項化,得到具體存在的值。 9. 經典類、新式類 經典類遵循:深度優先,python2中 新式類遵循:廣度優先,Python3中