面向對象-元類
阿新 • • 發佈:2018-04-20
exec als local 命名 clas html 圖片 分享 返回值
http://www.cnblogs.com/linhaifeng/articles/8029564.html
類的類就為元類
元類所需知識
#exec() #參數1:字符串形式的命令 #參數2:全局作用域(字典形式),不指定默認使用全局globals() #參數3:局部作用域(字典形式),不指定默認使用局部locals() g={‘x‘:1, ‘y‘:2} l={} #把exec中代碼當一個函數來看待 exec(""" global x,m x=10 m=100 z=3""",g,l) print(g) print(l)
一切皆對象,對象可以怎麽來用,共性?
- 都可以被應用,x=obj
- 都可以當函數的參數傳入
- 都可以當函數的返回值
- 都可以當作容器類型的元素,如都可當列表的元素
#類也是一個對象 class Foo: pass obj=Foo() print(type(obj)) print(type(Foo))
- 產生類的類稱之為元類,默認所有用class定義的類,他們的元類是type
定義類的方式
#方式一定義類: class Chinese: country=‘China‘ def __init__(self,name,age): self.name=name self.age=age def talks(self):print("%s is talking" % self.name) #方式二定義類: #定義類的三要素 # 類名,類的基類,類的命名空間 class_name=‘Chinese‘ class_base=(object,) class_body=""" country=‘China‘ def __init__(self,name,age): self.name=name self.age=age def talks(self): print("%s is talking" % self.name) """ class_dic={} exec(class_body,globals(),class_dic) Chinese1=type(class_name,class_base,class_dic) print(Chinese) print(Chinese1)
自定義元類來控制類的創建
面向對象-元類