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...