metaclass 攔截類的建立,並返回

2022-06-19 11:45:10 字數 806 閱讀 8582

def

upper_attr(future_class_name, future_class_parents, future_class_attr):

#遍歷屬性字典,把不是__開頭的屬性名字變為大寫

newattr ={}

for name,value in future_class_attr.items():#

遍歷字典

ifnot name.startswith("

__"):#

如果不是以__開頭

newattr[name.upper()] =value

#將future_class_attr字典中的鍵大寫,然後賦值

return type(future_class_name, future_class_parents, newattr)#

第三個引數為新修改好的值(類名,父類,字典)

class foo(object, metaclass=upper_attr):

#使用upper_attr對類中值進行修改

bar = '

bip'

#一開始建立foo類時

print(hasattr(foo, '

bar'))#

hasattr檢視foo類中是否存在bar屬性

print(hasattr(foo, '

bar'

))f = foo()#

例項化物件

print(f.bar)#

輸出

2020-05-08

Python中的元類 metaclass

在wiki上面,metaclass是這樣定義的 in object oriented programming,a metaclass is a class whose instances are classes.python中物件模型如下圖 其中,實線表示 is kind of 派生 的關係,虛線表...

python中的元類metaclass

元類metaclass 元類是可以讓你定義某些類是如何被建立的。從根本上說,賦予你如何建立類的控制權。元類也是乙個類,是乙個type類。元類一般用於建立類。在執行類定義時,直譯器必須要知道這個類的正確的元類,如果此屬性沒有定義,它會向上查詢父類中的 metaclass 屬性。如果還沒發現,就查詢全域...

Python中的元類 metaclass

動態語言和靜態語言最大的區別就是,函式和類的定義不是在編譯時執行的,而是在執行時才真正執行。而在python中,類定義也是在執行時候才被建立,而建立過程是通過呼叫type方法來實現。我們也可以不使用類定義的方式來建立類定義。因此我們除了可以通過繼承的方式來控制類的建立行為,也可以通過定義metacl...