2017-10-17 58 views
0

如果我在Python爲什麼Python重新映射我的屬性名稱?

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() 

運行此則打印

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

爲什麼__bingo獲得改名?雙下劃線屬性是否保留?

+0

因爲這正是您告訴Python要做的*。你從哪裏得到使用雙下劃線的想法?你是否偶然發現了這種行爲?或者你是否遵循了一些教程,告訴你雙下劃線是「私人的」? –

+0

我沒有問題,這被標記爲重複,但[鏈接的問題](https://stackoverflow.com/questions/7456807/python-name-mangling)只與這個問題相切。有[回答這個問題](https://stackoverflow.com/a/34903236/44330)確實回答我的問題。 –

+0

@ juanpa.arrivillaga我偶然發現了這種行爲,並想知道爲什麼,這正是我的問題所說的。 (順便說一下,你的評論有點傲慢。) –

回答

2

它與mangling有關,python的解釋器所做的一切。這裏有一篇關於它的文章。

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

+1

啊,好的,這裏是文檔中的項目:https://docs.python.org/2.7/tutorial /classes.html#tut-private –

相關問題