マングリング

Pythonには、アンダースコア二つ"__"から始まって、アンダースコア二つ"__"で終わらない名前の属性が、難読化される、というよくわからん仕様がある。

「アンダースコア2つで終わらない」という条件は意識していなかった。特殊メソッドは例外にしたくないだろうから、よく考えれば当たり前。挙動的に、前後の2文字のみを見ているので3文字目が"_"であっても関係ない。


ソースコードにすると以下のような感じ。Cのコードを読んだ訳でないので、あくまでも挙動からの類推。

def is_mangled(attr_name):
    if attr_name[:2] == '__' and not attr_name[-2:] == '__':
        return True
    return False