Problemi di importazione, import circolare e NameError

di il
1 risposte

Problemi di importazione, import circolare e NameError

Sto provando a fare un classe che eredita da un'altra. Il problema che sto avendo è relativo agli import.

food_bot
+-- __init__.py
+-- price
¦   +-- __init__.py
¦   +-- item_pricing.py
¦   +-- pricing.py

Questa è la struttura delle cartelle del progetto (non completa, soltanto la cartella price è rilevante per il prroblema).
Nel __init__.py dentro a price ho importato

from .item_pricing import ItemPricing
from .pricing import Pricing

__all__ = [
    'ItemPricing',
    'Pricing'
]
Mi serve importare Pricing nel file item_pricing.py e l'ho fatto usando il path intero della classe Pricing:

from __future__ import annotations
from math import floor
from typing import TYPE_CHECKING

from food_bot.menu import MenuItem
from food_bot.exceptions import ParameterError
from food_bot.price.pricing import Pricing

class ItemPricing(Pricing): ...
Ho fatto così perché importando Pricing usando from food_bot.price import Pricing (e non from food_bot.price.pricing import Pricing) inizia un import circolare; ho provato anche a mettere l'import in questione sotto a un
if TYPE_CHECKING:
, l'import circolare è risolto ma, dato che uso Pricing come classe base per ItemPricing, ottengo un NameError: name 'Pricing' not defined, anche se effettivamente è definito ma solo in fase di TYPE_CHECKING.

In conclusione voglio poter importare Pricing così:
from food_bot.price import Pricing
dato che è lo scopo del mio __init__.py E usare Pricing come classe base per ItemPricing.
Forse non sto capendo bene come funzionano TYPE_CHECKING e __future__.annotations, ho provato a leggere i doc ma forse ho capito male.
Qualcuno sa aiutarmi?

1 Risposte

  • Re: Problemi di importazione, import circolare e NameError

    Ciao,
    Ho ricreato questa tua struttura.
    Importando la classe Pricing con "from food_bot.price.pricing import Pricing" in item_pricing.py e non mi da alcun problema.
    Ho provato anche ad imporla usando "from food_bot.price import Pricing" e quello effettivamente mi da errore, come previsto.

    Però, contrariamente e te, non ho usato ne "__future__" ne "TYPE_CHECKING", quindi prova senza.

    Altrimenti, non ho trovo alcun errore...

    Nel caso, riusciresti a mandare in qualche modo il progetto? così da poter analizzare il problema più nello specifico.
Devi accedere o registrarti per scrivere nel forum
1 risposte