1. 程式人生 > >3.1.14 元類的介紹

3.1.14 元類的介紹

第一個 作用 名稱空間 返回值 空間 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 元類的介紹