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?