面向對象
類class:屬性和方法的集合
對象:類的具象,是一個實體
面向對象三要素:
1、封裝:將數據和操作組裝到一起(組裝),
隱藏數據:對外只暴露一些接口,通過接口訪問對象。
2、繼承:復用,多繼承少修改,OCP(Open-closed Principle)
3、多態:
定義:class MyClass
類的定義就會產生一個類對象,類定義中的變量和方法都是類的屬性(保存在類的__dicd__中)
實例化:a = MyClass(),生成了一個類的對象a
實例的初始化 __init__(其內的參數為實例的變量)
實例的變量是每個實例自己的變量,是自己獨有的,類的變量是類的實例共享的屬性和方法。都保存在各自的__dict__中。
封裝:
類方法:
在類定義中,使用@classmethod裝飾器修飾,必須至少有一個參數,第一個參數給了cls,cls指代類對象自身
靜態方法:
在類定義中,使用@staticmethod裝飾器修飾,調用時,不會隱式的傳入參數
保護變量:在變量前加_,(開發者之間的約定,解釋器沒做任何改變)
私有變量:在變量前加__,(解釋器將變量名字改了,變成 _類名__變量名)
屬性裝飾器:
使用@property裝飾,后面跟的函數名就是以后的屬性名,也是getter。
@property
def age(self):
return self.__age
setter裝飾器,可以改屬性
@age.setter
def age(self,vaule)
self.__age = vaule
deleter裝飾器,可以刪除屬性,很少用
property必須在前,setter在后
繼承:
class Cat(Animal),Cat繼承了Animal的屬性和方法
繼承時,公有的,子類和實例都可以隨意訪問,私有成員被隱藏,子類和實例不可直接訪問,私有變量所在的類內的方法可以訪問這個私有變量
如果在子類中寫相同的屬性或方法,會覆蓋父類的方法。
繼承中的初始化:
如果父類中定義了__init__方法,應該在子類中調用它(使用 super().__init__(age) 方法)
多繼承:
一個類繼承了多個類,也就是有多個父類,輕易不要用
Mixin:
一個復雜的類往往需要許多功能,這些功能可能來自不同的類,這就需要有很多的類組合在一起,由Mixin實現
Mixin本質上是多繼承實現的,體現的是一種組合的設計模式
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88329