我以爲他們是同之前我跑這個代碼:getattr(self,'__a')和self .__ a在Python中有什麼區別?
class B(object):
def show(self):
self.__a = "test"
print "B"
def this_b(self):
print "this_b"
print self.__a
print getattr(self, '__a') #exception
class C(B):
def show(self):
print "C"
# B.show(self)
super(C, self).show()
def call(self):
print "call"
self.show()
self.this_b()
# print self.__a
C().call()
它提高AttributeError: 'C' object has no attribute '__a'
與getattr
語句,但爲什麼呢?
因爲[名稱重整(https://docs.python.org/2/tutorial/classes.html#私有變量和一流的本地引用)。 – nneonneo
通常,現在在Python中不鼓勵使用'__'前綴的屬性名稱,而只使用一個下劃線。 –
@ErikAllik:我不確定這是否受到鼓勵。它始終只適用於在派生類中應該防止意外覆蓋的變量。 – nneonneo