Pythonの標準ライブラリに、 "private"属性名を持つPythonの名前マングリングスキームを再現する関数はありますか?それがあるように見えるが、私は私の人生のためにそれを見つけることができない。Pythonネームマングリング関数
私はこれを書いていますが、もっと良い方法があれば私はすべて耳にします。 compilerモジュールは、このためのPython実装を持っているよう
def mangle_name (cls, attrname) :
prefix = '_' + cls.__name__.lstrip('_')
if not attrname.startswith('__') :
attrname = '__' + attrname
if not attrname.endswith('__') :
return prefix + attrname
else :
return attrname
class Foo :
__some_such = 3
name = mangle_name(Foo, '__some_such')
print name
print hasattr(Foo(), name)
私はそのような機能はありませんかなり確信しています標準ライブラリ。何のためにそれが必要ですか? –
これはほとんどいつも悪いことをするのに使われるだろうと思う。 –
基本的には、任意のクラスのプライベート属性に動的にアクセスする必要があります。上記の関数は機能します。しかし、私が気付いていない(予期せぬ問題がある)問題があるかもしれません。だから誰かを使うことが最善の選択肢のようだ。 – rectangletangle