元類編程-- metaclass
阿新 • • 發佈:2018-04-19
cti -- 實例 IT class metaclass 類 對象 imp port
#類也是對象,type創建類的類 def create_class(name): if name == "user": class User: def __str__(self): return "user" return User elif name == "company": class Company: def __str__(self): return "company" return Company#type動態創建類 # User = type("User", (), {}) #名稱,繼承(要繼承的base類),屬性或方法(但是要字典形式) def say(self): return "i am user" # return self.name class BaseClass(): def answer(self): return "i am baseclass" class MetaClass(type): #繼承type為元類 def __new__(cls, *args, **kwargs): returnsuper().__new__(cls, *args, **kwargs) from collections.abc import * #什麽是元類, 元類是創建類的類 對象<-class(對象)<-type class User(metaclass=MetaClass): def __init__(self, name): self.name = name def __str__(self): return "user" #python中類的實例化過程,會首先尋找metaclass,通過metaclass去創建user類 #type去創建類對象,實例if __name__ == "__main__": # MyClass = create_class("user") # my_obj = MyClass() # print(type(my_obj)) # User = type("User", (BaseClass, ), {"name":"user", "say":say}) my_obj = User(name="bobby") print(my_obj)
元類編程-- metaclass