Usted necesita self
:
self.__private()
de clases en Python toman tiempo para acostumbrarse si viene desde C#/C++/Java, como parece que eres. Probablemente esto esté matando la forma "pitónica" de redactar cosas, pero puedes pensarlo así (me ayudó):
Cada clase define un espacio de nombres definido desde sí mismo como self
y desde afuera con el nombre de una instancia de esa clase. Las cosas "privadas" con dos guiones bajos se destrozan, por lo que desde fuera debe llamarlo por un nombre especial, pero desde dentro puede simplemente usar .
Como mencionó Joe en su comentario, las variables privadas normales suelen nombrarse con un solo guión bajo, el guión bajo doble lo manipula para que la herencia funcione sin conflictos de nombres en las subclases. No se aplica la privacidad en Python, es puramente convencional que dice que no se puede usar una variable privada desde fuera de la clase.
Como mencionó Thomas, self
es también una convención. Para cualquier método (una función declarada como parte de una clase) la instancia que el método está llamado es el primer parámetro pasado en Usted sólo puede hacer tan fácilmente esto:.
def __private(randomText):
print "Hey man! This is private!"
def public(otherRandomText):
otherRandomText.__private()
print "I don't care if you see this!"
Sin embargo, si lo hace los espíritus de la lógica y el buen estilo de programación te perseguirán a ti y a tus descendientes por toda la eternidad. (self
es mucho preferible).
Cualquier pythonistas desea corregir/explicar más?
Además, si no lo ha hecho, lea esta sección de la documentación: http://docs.python.org/tutorial/classes.html#private-variables Los guiones bajos únicos son la convención típica para las variables "privadas". Por lo general, solo utiliza doble guión bajo cuando desea evitar los conflictos de nombres en las clases que heredan de su 'MyClass'. Los guiones bajos dobles invocarán el cambio de nombre, que puede ser lo que querías aquí, pero quería asegurarte de que lo sabes ... –
No uses '__'. Está reservado para "cambiar nombres", algo que Python hace internamente para asegurarse de que los nombres internos nunca colisionen. –