[英]python: name mangling in a dynamically created class
我想做這樣的事情
def make_class(name : str)->type:
class Ret:
__name__ = name
def __init__(self):
self.__x = 0
return Ret
A = make_class('A')
a = A()
assert a._A__x == 0
基本上,我想要的是創建一個類型,以便它根據動態標識符破壞其成員,但上面的示例不起作用。 元類也沒有。
我能想到的唯一解決方案是:
執行整個類定義
exec("""
class {}:
def __init__(self):
self.__x = 0
""".format(name))
或者通過getattr設置屬性
class Ret:
def __init__(self):
setattr(self,'_'+name+"__x",0)
但由於各種原因,它們都沒有吸引力,有沒有正確的方法呢?
Python名稱修改從根本上說是靜態的。 在函數的name
參數可用之前,它在字節碼編譯時執行。 要動態調用此機制,您必須動態編譯代碼,這意味着您必須使用exec
或類似的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.