Tengo el siguiente código:
def __static_func(name): print 'Name = ' + name class A: def __init__(self, name): self.name = name def fun(self): __static_func(self.name) a = A('foo') a.fun()
Cuando se lanza en Python 2.7, produce
NameError: global name '_A__static_func' is not defined
Entonces, la pregunta es ¿cómo invoco la función global desde el método de clase?
Recientemente estuve leyendo un libro ” Aprendiendo Python por O’Reilly ” (página 944, Capítulo 31) y se mencionó que cuando se usan dobles guiones __
como los caracteres iniciales de un método o una variable en la Class
, automáticamente se agrega el _classname
a esa función donde classname
es el nombre de la clase. Esto se hace para localizar un nombre a la clase a la que pertenece. Esto se denomina Nombre Mangling en el contexto de los atributos de la clase Pseudoprivate .
De esta manera, puede usar el mismo nombre __variable
en dos clases diferentes A
y B
ya que las variables / métodos se convertirán de forma privada en _A__variable
y _B__variable
respectivamente. Así que solo nombre su función global con otro guión bajo, por ejemplo, para evitar este conflicto.
No utilice guiones bajos.
def _static_func(name): print 'Name = ' + name class A: def __init__(self, name): self.name = name def fun(self): _static_func(self.name) a = A('foo') a.fun()
Deberia trabajar