面向對象高階


反射
用戶輸入什麼屬性,直接調用該屬性
經過字符串,映射到屬性上
經過一個字符串來映射到(訪問)對象的屬性,叫作反射
choice = input(">>")
print(obj.choice)函數

hasattr(obj,"name") #判斷obj下有沒有「name」屬性
getattr(obj,'name',None) #拿到obj對象的‘name’屬性,沒有返回None
setattr(obj,'name','alex') 本質上是obj.name ='alex' 賦值
delattr(obj,"age') #del obj.agespa


內置方法
iterm系列
將對象模擬成字典去操做它的屬性對象

元類
exec()至關於一個函數去執行,裏面的變量是局部變量繼承

#一切皆對象,對象能夠這麼用
1,均可以被引用,x=obj
2,均可以當作函數的參數傳入
3,均可以當作函數的返回值
4,均可以當作容器類的元素
但凡是有了這四個用法,就是對象
類也是對象,產生類的類,就是元類,默認全部用class定義的類,他們的元類都是type
定義類的兩種方式
1,class
2,type
exec(class_body,globel(),class_dic)
Chinese = type(class_name,class_base,clsee_dic) #類的名字,類的基類,類的名稱空間開發

自定義元類控制類的建立
繼承type,重寫__init__()字符串

 

內置方法get

元類input

 

#__call__方法
使對象可調用
class Foo:
def __call__(self,*args,**kwargs)
造出空對象
obj= object.__new__(self)
初始化obj
self.__init__(obj,*args,**kwargs) 
返回obj 
return obj it

obj = Foo()
實例化對象有三步
造出空對象
初始化obj
返回obj 

obj(1,2,3,a =1)
元類內部也應該有一個__call__方法,會在調用Foo時觸發執行class

自定義元類控制類的實例化行爲的應用
單例模式
實現屢次實例化,獲得的對象都是同樣


面向對象軟件開發
1抽象化類,理清類與類之間的關係

現實中沒有邏輯這個類定義一些現實中原本不存在的類一般屬性是名詞方法是動詞

相關文章
相關標籤/搜索