Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

357
Vistas
Python: clase interna de referencia de otra clase interna

Estoy tratando de hacer referencia a una clase interna de otra clase interna. He probado ambos:

 class Foo(object): class A(object): pass class B(object): other = A

y

 class Foo(object): class A(object): pass class B(object): other = Foo.A

con sus respectivos resultados:

 Traceback (most recent call last): File "python", line 1, in <module> File "python", line 6, in Foo File "python", line 7, in B NameError: name 'A' is not defined

y

 Traceback (most recent call last): File "python", line 1, in <module> File "python", line 6, in Foo File "python", line 7, in B NameError: name 'Foo' is not defined

es posible?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto no es posible, ya que todo lo que defina en una clase se convierte en un miembro válido solo en una instancia de esa clase, a menos que defina un método con @staticmethod , pero no existe tal propiedad para una clase.

Entonces, esto tampoco funcionará:

 class Foo(object): x = 10 class A(object): pass class B(object): other = x

Esto funcionará, pero no es lo que pretendías:

 class Foo(object): x = 10 class A(object): pass class B(object): def __init__(self): self.other = Foo.A f = Foo() print(fB().other)

La salida es:

 <class '__main__.Foo.A'>

La razón por la que esto funciona es que los métodos (en este caso, __init__ ) se evalúan cuando se crea el objeto, mientras que la asignación antes de __init__ se evalúa mientras se lee e interpreta la clase.

Puede obtener lo mismo que desea simplemente definiendo todas las clases dentro de un módulo propio. Al importar el módulo, lo convierte en un objeto cuyos campos son las clases que definas en él.

over 4 years ago · Santiago Trujillo Denunciar

0

No creo que sea una buena práctica orientada a objetos, pero puede establecer atributos de clase interna en el ámbito de la clase externa. Por ejemplo.

 class Class2: class Labels: c2l1 = 'label 1' c2l2 = 'label 2' class Params: pass # p1 = None # p2 = None # p3 = None Params.p1 = Labels.c2l2 Params.p2 = 1234 print(Class2.Params.p1) print(Class2.Params.p2) # print(Class2.Params.p3)

 label 2 1234

Todos estos son atributos de clase, pero los atributos de instancia deberían funcionar de manera similar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda