myślałem, że były takie same przed wpadłem ten kod:Jaka jest różnica między getattr (self, "__a") a self .__ a w 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()
podnosi AttributeError: 'C' object has no attribute '__a'
ze stwierdzeniem getattr
, ale dlaczego?
bo [nazwa przekręcona] (https://docs.python.org/2/tutorial/classes.html# private-variables-and-class-local-references). – nneonneo
Ogólnie rzecz biorąc, używanie nazw atrybutów "__" z prefiksem jest odradzane w Pythonie na korzyść tylko jednego podkreślenia. –
@ErikAllik: Nie jestem pewien, czy kiedykolwiek został zachęcony. Zawsze był dostępny wyłącznie dla zmiennych, które powinny być chronione przed przypadkowym nadpisaniem w klasie pochodnej. – nneonneo