4-9 Python物件的自省機制
阿新 • • 發佈:2019-01-25
自省是通過一定的機制查詢到物件的內部結構
Python中提供了很多的方法來查詢物件的內部結構,比如:
hasattr:查詢物件是否有一個特性的屬性
getattr:獲取物件的屬性
setattr:設定物件的屬性
delattr:從一個物件中刪除屬性
舉個例子
class A(object):
def retrieve(self):
return "A.retrieve"
class B(object):
def get_value(self):
return "B.retrieve"
def func1(obj):
if hasattr(obj, 'retrieve'):
getattr(obj, 'retrieve')()
a=A()
b=B()
根據Python的鴨子型別的概念,在這裡我們可以傳遞物件a或者物件b給函式func1, 那麼在程式碼中func1函式中不能確定obj的屬性的,只有執行的時候才知道obj是物件a還是物件b。那麼如何使用obj來操作未知物件的屬性呢??
就是利用上面的四個方法,可以來操作這種情況,可以用hasattr和getattr來查詢到物件屬性,然後用setattr和delattr來操作屬性