Пользовательский объект как функция, указанный тип параметра в Python - PullRequest
0 голосов
/ 17 октября 2018

Я определил свой класс Player в Python3, и теперь я пытаюсь определить метод в другом классе, который бы использовал объект типа Player в качестве параметра, поэтому код будет выглядеть так:

def change_player_activity(self, player: Player):
    pass

Но это дает мне ошибку.Я знаю, что мог бы выполнить следующую операцию:

if not isinstance(player,Player):
        raise TypeError

Но мне просто интересно, есть ли какой-нибудь встроенный способ сказать Python3, что он принимает только объекты данного класса?

1 Ответ

0 голосов
/ 17 октября 2018

Есть ли какой-либо встроенный способ сообщить Python3, что он должен принимать объекты данного класса?

Нет.

Этого не существует, ив любом случае это было бы бесполезно, потому что Python использует принцип Duck Typing.Если он выглядит как Player и крякает как Player, относитесь к нему как к игроку.В противном случае, raise TypeError.

Вы должны повышать TypeError только тогда, когда вы просите объект сделать что-то, что Player должен быть в состоянии сделать, и он не может этого сделать.Что если кто-то захочет передать экземпляр своего собственного Player класса в вашу функцию?Тогда это не сработает.


Возвращаясь к вашей реальной проблеме: вы хотите напечатать подсказку Player до того, как будет определено Player.Способ сделать это - написать "Player" вместо Player в подсказке типа:

def change_player_activity(self, player: "Player"):
    pass

В __future__ (каламбур предназначен), разработчики Python планируют:заставьте его не пытаться сразу же найти подсказки типа , потому что такие вещи - боль.

...