Как можно сделать так, чтобы при вызове Generate
функция принимала
только явные значения типа int
?
То есть, например, когда я вызываю random.randint()
, интерпретатор
мне сообщает, какие значения принимает randint()
и их тип: (a: int, b: int) -> int
Сейчас интерпретатор при вызове сообщает мне следующее:
(password_length: PasswordGenerator) -> str
Интерпретатор сам никак типы не показывает (и не проверяет), скорее всего это IDE выводит типы метода и отображает их.
(password_length: PasswordGenerator)
показывает из-за того, что у обычных методов первым аргументом должен идти self
, через который в метод передается сам объект при вызове метода от объекта, соответсвенно у первого аргумента тип - такой же как сам класс, в котором находится метод. Чтобы тип аргумента определялся правильно, нужно объявить метод статическим (добавив декоратор @staticmethod
):
class PasswordGenerator:
@staticmethod
def Generate(password_length):
password = ''
for i in range (int(password_length)):
rand_matrix_row = random.randint(0, 3)
password = password + matrix[rand_matrix_row][random.randint(0, len(matrix[rand_matrix_row]))-1]
return(password)
Статический метод - это метод, который вообще никак не зависит от состояния объекта или класса, по сути - просто отдельная функция, которую решили поместить внутрь класса. В данном случае у вас именно такой метод. Но если бы, например, переменная matrix
была не глобальной, а полем объекта, то пришлось бы ваш метод сделать обычным, добавить параметр self
, и обращаться к matrix
через self.matrix
.
Чтобы явно указать типы аргументов и возвращаемого значения функции, нужно использовать аннотации:
class PasswordGenerator:
@staticmethod
def Generate(password_length: int) -> str:
password = ''
for i in range (int(password_length)):
rand_matrix_row = random.randint(0, 3)
password = password + matrix[rand_matrix_row][random.randint(0, len(matrix[rand_matrix_row]))-1]
return(password)
В любом случае, выведенный автоматически или указанный через аннотации тип никак сам по себе интерпретатором при работе программы не проверяется. Он может проверяться внешними инструментами, например IDE или линтерами, такими как mypy.