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