2017-10-17 8 views
0

私はこれはそれがPythonが私の属性名を再マップするのはなぜですか?

['_info', '_Boo__bingo', '_x'] 

はなぜ__bingoの名前が変更を取得ん印刷し

class Boo(object): 
    def __init__(self, x): 
     self._x = x 
     self.__bingo = 3 
     self._info = {'x': x, 'y':42} 
    def __dir__(self): 
     return ['x'] 
    @property 
    def x(self): 
     return self._x 
    @property 
    def z(self): 
     return self._x+1 
    def __getattr__(self, key): 
     return self._info[key] 

b = Boo(44) 
b.__dict__.keys() 

のPython

で実行する場合は?ダブルアンダースコア属性は予約されていますか?

+0

これは*あなたがPythonに何を指示したかの正確なものです。ダブルアンダースコアを使用するアイデアはどこにありましたか?あなたはこの行動に直面しましたか?または、二重アンダースコアが「プライベート」であることを示すチュートリアルに従っていますか? –

+0

私は重複としてマークされていても問題はありませんが、[リンクされた質問](https://stackoverflow.com/questions/7456807/python-name-mangling)はこの質問に接するだけです。私の質問に答える[その質問の答え](https://stackoverflow.com/a/34903236/44330)があります。 –

+0

@ juanpa.arrivillaga私はこの振る舞いにつまずくと、なぜ、私の質問が何を正確に知りたかった。 (あなたのコメントは、ちょっと傲慢であるように見えます。) –

答えて

2

マングリングと関係があります。何かpythonのインタープリタがあります。ここにそれに関する記事があります。

https://shahriar.svbtle.com/underscores-in-python

+1

ああ、okはここの文書の項目です:https://docs.python.org/2.7/tutorial /classes.html#tut-private –

関連する問題