Я знаю, что python - это динамически типизированный язык, но хочу знать, возможно ли это, скажем, у меня есть список классов Person, называемых людьми.
people = []
people.append(Person('james'))
for p in people :
p.name = p.name + '_'
Есть ли способ указать тип p, что-то вроде этого:
for p:Person in people :
p.name = p.name + '_'
Причина, по которой я прошу об этом, заключается в том, что p, похоже, обрабатывается IDE как тип any/object, intellisense не распознает никакое свойство, когда я печатаю p.
Я использую vsCode с плагином python
Может ли понимание списка помочь мне решить эту проблему, или это просто проблема с тем, что IDE не определяет тип? - https://stackoverflow.com/a/30129220/17205969
Вы можете сделать это, добавив аннотацию типа в список при его объявлении, например:
from typing import List
class Person:
def __init__(self, name: str) -> None:
self.name = name
people: List[Person] = []
people.append(Person("james"))
for p in people:
p.name = p.name + "_"
В VS Code я вижу свойство name
в автозаполнении IntelliSense:
Переменная цикла p
также распознается как имеющая тип Person
:
Если вы встроите объявление списка через понимание списка, общий тип списка может быть выведен, и вы можете полностью отказаться от подсказки типа:
people = [Person("james") for i in range(10)]
отличный ответ, спасибо, единственная плохая часть понимания списка заключается в том, что он требует, чтобы вы чем-то инициализировали список.