Допустим, у меня есть классный костюм и четыре подкласса костюма: Heart, Spade, Diamond, Club.
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
У меня есть метод, который получает костюм в качестве параметра, который является объектом класса, а не экземпляром. Точнее, он может получить только одно из четырех значений: Heart, Spade, Diamond, Club. Как я могу сделать утверждение, которое гарантирует такую вещь? Что-то вроде:
def my_method(suit):
assert(suit subclass of Suit)
...
Я использую Python 3.
_class
, делая их похожими suit_class
. Я предложил такое соглашение об именах в соответствующем вопросе .
my_method(Heart)
my_method(Spade)
...
inspect.isclass
или просто использовать isinstance(myvar, type)
в Python 3, что issubclass
вызовет ошибку, если она передана не классу. Смотрите этот ответ . Я бы прокомментировал ответ ниже, но он никогда бы не увидел свет.
my_method
могут быть получены в качестве параметров: «он может получить только одно из четырех значений: Heart, Spade, Diamond, Club». Эти значения являются объектами класса, а не экземплярами класса. Мне кажется, это довольно ясно, хотя я полагаю, что вы правы насчет неопределенности, потому что ответы охватывают обе возможности. Вы можете редактировать вопрос, если у вас есть более ясное слово для этого. Спасибо за комментарий.