Как задать тип параметров метода для изменяемого объекта в Python

#python #python-3.x #types #iterable

#python #python-3.x #типы #итеративный

Вопрос:

Как создать метод, подобный следующему, с итеративным вводом конкретного объекта в python:

В Java мы можем создать его, как показано ниже:

 abstract public ArrayList<Device> returnDevices(ArrayList<Object> Device){
   ...
}
 

В python я хочу создать модель, подобную следующей:

 class OptionModel:
    def __init__(
            self,
            option: str = None,
    ) -> None:
        self.__option = option

    @property
    def option(self):
        return self.__option

    @option.setter
    def option(self, value):
        self.__option = value

 

И в другом классе я хочу получить список объектов OptionModel, как показано ниже:

 class Command:
    def __init__(
            self,
            options: List[OptionModel] = None,
    ) -> None:
        self.__options = options
    
    @property
    def options(self) -> List[OptionModel]:
        return self.__options

    @options.setter
    def options(self, value: List[OptionModel]):
        self.__options = value
 

И когда для цикла на Options_ получаем OptionModel в моей IDE:

     def print_summery(self):
        for option in self.options:
            print("  {}  {}tt{}".format(option.option, option.alias, option.brief))
 

Комментарии:

1. Означает ли «изменяемый» объект любого типа? Вы можете просто указать -> List , не указывая тип содержимого. Или в python есть общий object тип. Кроме того, это не Java. установка сеттеров и геттеров для всего не является частью стиля Python.

2. В чем ваш вопрос? Похоже, что ваш код уже выполняет то, что вы описываете — единственная ошибка, которую я вижу, заключается в том, что ваш Command класс должен инициализироваться self.__options options or [] , поскольку похоже, что другие ваши функции ожидают, что это будет список. Использование «строгой необязательной» проверки mypy приведет к таким вещам!