Digamos que eu tenho um naipe de classe e quatro subclasses de naipe: Coração, Pá, Diamante, Clube.
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
Eu tenho um método que recebe uma ação como parâmetro, que é um objeto de classe, não uma instância. Mais precisamente, ele pode receber apenas um dos quatro valores: Coração, Pá, Diamante, Clube. Como posso fazer uma afirmação que garanta tal coisa? Algo como:
def my_method(suit):
assert(suit subclass of Suit)
...
Estou usando o Python 3.
_class
, tornando-os semelhantes suit_class
. I propôs tal convenção de nomenclatura em uma questão relevante .
my_method(Heart)
my_method(Spade)
...
inspect.isclass
ou simplesmente usar uma condição isinstance(myvar, type)
no Python 3, pois isso issubclass
gerará um erro se ela passar por uma não-classe. Veja esta resposta . Eu teria comentado a resposta abaixo, mas nunca teria visto a luz do dia.
my_method
podem ser obtidos como parâmetros: "ele pode receber apenas um dos quatro valores: Coração, Pá, Diamante, Clube". Esses valores são objetos de classe, não instâncias de classe. Parece-me bastante claro, embora eu suponha que você esteja certo sobre a imprecisão, porque as respostas cobrem as duas possibilidades. Você pode editar a pergunta se tiver uma redação mais clara. Obrigado pelo comentário.