Nehmen wir an, ich habe einen Klassenanzug und vier Unterklassen von Anzügen: Herz, Spaten, Diamant, Verein.
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
Ich habe eine Methode, die eine Farbe als Parameter erhält, die ein Klassenobjekt ist, keine Instanz. Genauer gesagt kann es nur einen der vier Werte erhalten: Herz, Spaten, Diamant, Verein. Wie kann ich eine Aussage machen, die so etwas gewährleistet? Etwas wie:
def my_method(suit):
assert(suit subclass of Suit)
...
Ich benutze Python 3.
_class
dass sie wie suit_class
. Ich habe eine solche Namenskonvention in einer relevanten Frage vorgeschlagen .
my_method(Heart)
my_method(Spade)
...
inspect.isclass
oder einfach isinstance(myvar, type)
in Python 3 verwenden, da dies issubclass
einen Fehler auslöst, wenn eine Nichtklasse übergeben wird. Siehe diese Antwort . Ich hätte die Antwort unten kommentiert, aber sie hätte nie das Licht der Welt erblickt.
my_method
als Parameter erhalten werden können: "Es kann nur einen der vier Werte erhalten: Herz, Spaten, Diamant, Schläger". Diese Werte sind Klassenobjekte, keine Klasseninstanzen. Es scheint mir ziemlich klar zu sein, obwohl ich vermute, dass Sie in Bezug auf die Unbestimmtheit Recht haben, da die Antworten beide Möglichkeiten abdecken. Sie können die Frage gerne bearbeiten, wenn Sie eine klarere Formulierung dafür haben. Danke für den Kommentar.