consideri una classe con un metodo di "privato" come ad esempio:di override metodo del "privato" in Python
class Foo(object):
def __init__(self):
self.__method()
def __method(self):
print('42')
Quando provo ad sottoclasse Foo
e metodo di sostituzione __method
, si può vedere che Foo.__method
è ancora chiamato, invece di MoreFoo.__method
.
class MoreFoo(Foo):
def __method(self):
print('41')
>>> MoreFoo()
42
<__main__.MoreFoo object at 0x7fb726197d90>
Quale sarebbe il modo di scavalcare un tale metodo?
http://stackoverflow.com/questions/1301346/the-mating-of-a-single-and-a-double-underscore-before-an-object-name-in-python – tacaswell
Fuori interesse, dove hai avuto l'idea che fosse equivalente a una variabile privata? È un malinteso davvero pessimo, e lo vedo sempre senza sapere da dove viene. –
@Lattyware - Penso che provenga dalla sezione sui documenti chiamata "Variabili private e riferimenti locali di classe". Continua dicendo che non ci sono variabili private ... ma che la doppia sottolineatura è la cosa più vicina che puoi ottenere - "Poiché esiste un caso d'uso valido per i membri della classe privata (vale a dire evitare scontri sul nome dei nomi con nomi definiti da sottoclassi), esiste un supporto limitato per un tale meccanismo, ... " – mgilson