簡體   English   中英

python:在動態創建的類中命名mangling

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM