1. 程式人生 > >面向對象相關

面向對象相關

strong 括號 turn 加載 直接 靜態變量 情況 __enter__ 對象

面向對象的三大特征

封裝 : 把固定功能的代碼封裝到一個代碼塊,函數,對象,打包成模塊

繼承 : 子類可以自動擁有父類中除了私有屬性外的其他所有內容

多態 : 同一個對象,多種形態

類的成員

變量 :

1.實例變量(字段) : 給對象用的

2.類變量(靜態變量) : 多個對象共享的.最好是用類名來訪問

方法 :

1.成員方法(實例方法) : 對象直接訪問的方法叫成員方法

2.靜態方法 : 不需要給方法傳遞self

@staticmethod
def func():
    pass

3.類方法 : 類方法被調用時也不需要傳遞實例對象

@classmethod
def func1(cls, a, b):
    
pass

屬性:

class Person:
    def __init__(self, name, gender, birth):
        self.name = name
        self.gender = gender
        self.birth = birth  # 2000  2018
    # 年齡 -> 應該是算出來的. 而不是直接存儲
    @property # 把一個方法更改成一個屬性, 每次拿屬性的時候都會自動的去執行這個方法
                   # 方法的返回值就是屬性值
    def age(self):  # 實例方法
print("我是方法") return 2018 - self.birth

1. 方法參數只能有一個self

2. 方法上方要寫@property

3. 調用的時候,不需要寫括號.直接當成屬性變量來用就可以了

私有:

使用__作為前綴,那麽這個方法或者變量就是一個私有的

私有變量 : self.__age = age

私有方法 : def __age(self): pass

類與類之間的關系:

1. 依賴關系

2. 關聯關系

3. 組合關系

4. 聚合關系

5. 繼承關系 : self就是你訪問方法的那個對象,先找自己,再找父類

6. 實現關系

類中的特殊成員

1. 類名()會自動執行__init__()

2. 對象()會自動執行__call__()

3. 對象[key]會自動執行__getitem__()

4. 對象[key] = value 會自動執行__setitem__()

5. del 對象[key]會自動執行__delitem__()

6. 對象+對象會自動執行__add__()

7. with對象as變量會自動執行__enter__和__exit__

8. 打印對象的時候會自動執行__str__

9. 去掉hash __hash__ == None 對象就不可哈希了

創建對象的步驟 : 加載類 → 開辟內存(__new__) → 初始化(__init__) → 使用對象調用方法

isinstance, type, issubclass函數

issubclass(Bar, Foo) 這個內置函數判斷xx類是否是xxx類型的子類

type(obj) 查看obj是由哪個類創建的

isinstance(Foo(), Foo) 判斷xxx是xx類型的數據,沒有type精準,只能往上判斷,是否是XX家族體系中的

函數和方法

1. 類方法.不論任何情況,都是方法

2. 靜態方法,不論任何情況.都是函數

3. 實例方法,如果是實例訪問.就是方法.如果是類名訪問就是函數

types模塊

from types import MethodType, FunctionType
def func():
    pass
print(isinstance(func, FunctionType))  # True
print(isinstance(func, MethodType))    # False 

面向對象相關