3.1.14 元類的介紹
阿新 • • 發佈:2018-06-02
第一個 作用 名稱空間 返回值 空間 class 定義類 定義 執行
#儲備知識exec
#參數1:字符串形式的命令
#參數2:全局作用域(字典形式),如果不指定默認就使用globals()
#參數3:局部作用域(字典形式),如果不指定默認就使用locals()
g={ ‘x‘:1, ‘y‘:2 } l={}
#exec功能,把裏面的第一個參數的字符轉成代碼執行,以global聲明的變量存到g的字典變量(全局變量)裏,其余的存在l的字典變量(局部變量裏)。 exec(""" global x,m x=10 m=100 z=3 """,g,l) print(g) print(l)
#一切皆對象,對象可以怎麽用?
#1、都可以被引用,x=obj
#2、都可以當作函數的參數傳入
#3、都可以當作函數的返回值
#4、都可以當作容器類的元素,l=[func,time,obj,1]
#類也是對象,Foo=type(....)
class Foo: pass obj=Foo() print(type(obj)) # 元類:Foo print(type(Foo)) # 元類:type class Bar: pass print(type(Bar)) # 元類: type
#產生類的類稱之為元類,默認所以用class定義的類,他們的元類是type
#定義類的兩種方式:
#方式一:class
class Chinese: #Chinese=type(...) country=‘China‘ def __init__(self,namem,age): self.name=namem self.age=age def talk(self): print(‘%s is talking‘ %self.name) # print(Chinese) obj=Chinese(‘egon‘,18) print(obj,obj.name,obj.age)
#方式二:type
#定義類的三要素:類名,類的基類們,類的名稱空間
class_name=‘Chinese‘ class_bases=(object,) class_body=""" country=‘China‘ def __init__(self,namem,age): self.name=namem self.age=age def talk(self): print(‘%s is talking‘ %self.name) """ class_dic={} #存放exec執行的第一參數存放的局部變量 exec(class_body,globals(),class_dic) # print(class_dic) Chinese1=type(class_name,class_bases,class_dic) #調用type的參數:類名,基類(元類,父類),空間名稱 # print(Chinese1) obj1=Chinese1(‘egon‘,18) print(obj1,obj1.name,obj1.age) #通過type生成出來的類對象 跟 class是一樣的
3.1.14 元類的介紹