Ho una classe contenitore generica:
from typing import Container, Generic, TypeVar, NamedTuple
import sys
fixed_typing = (sys.version_info >= (3, 6, 2) or
(3, 5, 3) <= sys.version_info < (3, 6))
T = TypeVar("T")
_Interval = NamedTuple("_Interval", [("start", int),
("stop", int),
("data", T)])
class Interval(_Interval, Container, Generic[T]):
if fixed_typing:
__slots__ = ()
...
Come potresti aver notato, c'è un interruttore che controlla l'utilizzo di __slots__
durante l'inizializzazione della classe. Fondamentalmente, mi piacerebbe utilizzare gli slot quando possibile, ma le versioni precedenti del modulo typing
non supportano gli slot nelle classi generiche a causa di un errore . Va bene usare l'interruttore dal punto di vista della progettazione del codice? Non l'ho mai visto prima, ecco perché mi sto chiedendo. Lo trovo simile a controllare i flag del compilatore usando il preprocessore in C / C ++, che è una cosa comune da fare.