es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Referencias de nombre de clase redundantes en Python

Mi programa de Python tiene la siguiente estructura:

projectfolder
|–classes
|–init.py
|–Exampleclass.py
|–singletons
|–init.py
|–Examplesingleton.py
init.py
Main.py

Básicamente, en mi clase principal, quiero crear varias instancias de Exampleclass.py (y otras clases de la carpeta classes) y ponerlas dentro de una instancia de Examplesingleton.py (básicamente el “Mundo” que está poblado por las instancias de las clases).

El problema es que siempre tengo que llamar a Examplesingleton y Exampleclass de esta manera:

Main.py

import singletons.Examplesingleton as Examplesingleton
import classes.Exampleclass as Exampleclass

test = Exampleclass.Exampleclass(“test”)
Examplesingleton.Examplesingleton.Exampleclasses.append(test)

¿Hay alguna forma en Python de referenciar estas clases sin escribir el nombre de la clase dos veces?

En lugar de:

Exampleclass.Exampleclass()

Quiero escribir simplemente:

Exampleclass()

Intenté usar:

from classes.Exampleclass import Exampleclass

Parece que eso lo permite, pero lleva a mensajes de error de importación circular.

Exampleclass.py:

class Exampleclass:

Somevariable = 0

def __init__(self, somevariable):
    self.Somevariable = somevariable

Examplesingleton.py:

class Examplesingleton(object):

Exampleclasses = []

@classmethod
def __init__(cls):
    pass
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma en Python de hacer referencia a estas clases sin tener que escribir el nombre de la clase dos veces. Puedes utilizar importaciones relativas para lograr esto.

    En lugar de escribir

    import classes.Exampleclass as Exampleclass
    

    puedes escribir

    from .classes.Exampleclass import Exampleclass
    

    Esto te permitirá hacer referencia a la clase como Exampleclass en lugar de classes.Exampleclass.Exampleclass.

    Sin embargo, como has mencionado, esto puede causar mensajes de error de importación circular. Para evitar esto, es posible que necesites reestructurar tu proyecto o utilizar un enfoque diferente. Esto podría implicar mover algunas clases a diferentes módulos o paquetes, o usar un framework de inyección de dependencias como Flask o Django.

Comments are closed.