python中的元程式設計

2021-09-24 19:47:02 字數 2666 閱讀 4655

python中

所有非object類都繼承自object類

所有類的型別包括type類都是type

type類繼承自object類,object類的型別也是type類

def __init__(self):

self.x = 1000

def show(self):

print(self.x)

xclass = type('x', (object, ), ) # 類

print(xclass)

# print(xclass.__name__) # x

print(xclass.__dict__)

# (,)

print(xclass.__bases__)

print(xclass.mro())

# [, ]

print(xclass().x) # 1000

print(xclass().show()) # none

print(type(xclass)) #

class meta(type):

# 現在的new方法跟以前不同了

def __new__(mcs, name, bases, attr: dict):

print(mcs)

print(name)

print(bases)

print(attr)

attr['id'] = 300 # 會改變類a中自己定義的id

print()

return super().__new__(mcs, name + '123', bases, attr) # 什麼都可以改變

print("~~~~~~~~~~~~~~~~~~")

# 元類是創造類的類

class a(metaclass=meta): # 修改了元類,並沒有改變繼承列表

# a的名字可以被元類改變,不僅如此,a的所有屬性都可以被元類修改

id = 2000

def __init__(self):

print('a.init~~~~~~~~')

"""~~~~~~~~~~~~~~~~~~

('a', (), )

{}"""

print(type(a)) # print(a.__bases__) # (,),沒有return語句,直接報錯nonetype

print(a.__dict__)

print('++++++++++++++')

class b(a):

# b的屬性也會受元類的影響,元類也可以改變b類的屬性

pass

print(type(b), b.__bases__) # 繼承時,元類與父類a一樣

# (,)

print(b.__dict__)

# print(b.__name__) # b123

print(a.__bases__) # (,),沒有return語句,直接報錯nonetype

class meta(type):

# 現在的new方法跟以前不同了

def __new__(mcs, name, bases, attr: dict):

print(mcs)

print(name)

print(bases)

print(attr)

attr['id'] = 300 # 會改變類a中自己定義的id

print()

return super().__new__(mcs, name, bases, attr) # 什麼都可以改變

print("~~~~~~~~~~~~~~~~~~")

# 元類是創造類的類

class a(metaclass=meta): # 修改了元類,並沒有改變繼承列表

# a的名字可以被元類改變,不僅如此,a的所有屬性都可以被元類修改

id = 2000

def __init__(self):

print('a.init~~~~~~~~')

class b(a):

# b的屬性也會受元類的影響,元類也可以改變b類的屬性

pass

c = meta('c', (), {})

print(type(c), c.__bases__)

print(type(a), a.__bases__)

print(type(b), b.__bases__) # 繼承時,元類與父類a一樣

"""(,)

(,)(,)

"""print('+++++++++++++++++')

class d:

pass

e = type('e', (), {})

print(type(d), d.__bases__)

print(type(e), e.__bases__)

# (,)

# (,)

print('********************')

class f(meta): # 注意是繼承,f現在也是元類,元類例項化就是在構造新的類

pass

print(type(f), f.__bases__)

# (,)

python元程式設計 Python 元程式設計

1 元程式設計 元程式設計 概念來自 lisp 和 smalltalk 我們寫程式 是直接寫 是否能夠用 來生成未來我們需要的 這就是元程式設計。用阿里生成 的程式稱為元程式,metaprogram,編寫這種程式就稱為元程式設計。python 語言能夠通過反射實現 元程式設計 python 中 所有...

python 元類程式設計 python的元類程式設計

一 property動態屬性 給類中的乙個方法函式加上 property裝飾器,將這個方法變成屬性描述符,將獲取方法變為獲取屬性。class user def init self,name,birthday self.name name self.birthday birthday property...

python 元類程式設計

裝飾器任何時候你定義裝飾器的時候,都應該使用 functools 庫中的 wraps 裝飾器來註解底層包裝函式.因為乙個普通裝飾器作用在某個函式上時,這個函式的重要的元資訊比如名字 文件字串 註解和引數簽名都會丟失。但是 wraps不會。import time from functools impo...