Получение аннотированных переменных экземпляра

#python #python-3.x

#python #python-3.x

Вопрос:

В PEP 526 представлен синтаксис для аннотаций переменных, которые могут быть добавлены к переменной экземпляра, даже если значение не определено.

 class BasicStarship:
    captain: str = 'Picard'               # instance variable with default
    damage: int                           # instance variable without default
 

Но когда я перечисляю переменные экземпляра, та, у которой нет значения, отсутствует в списке:

 starship = BasicStarship()
dir(starship) #doesn't return 'damage' field
 

Как я могу получить все переменные экземпляра, включая те, которые не имеют значения?

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

1. Вы установили damage в BasicStarship.__init__() ? Если нет, то атрибут никогда не добавлялся к экземпляру.

2.Вы можете использовать, например starship.__annotations__ , , но у него starship нет damage атрибута, и он его не имеет BasicStarship , так dir что, конечно, он его не покажет.

3. Вы намеревались сделать это классом данных?

Ответ №1:

__annotations__ показывает это:

 >>> starship.__annotations__
{'captain': <class 'str'>, 'damage': <class 'int'>}
 

Dict, содержащий аннотации параметров. Ключами dict являются имена параметров и ‘return’ для возвращаемой аннотации, если она предусмотрена.

Хотя, обратите внимание, из вашей ссылки:

[T] запись без значения a: int позволяет аннотировать переменные экземпляра, которые должны быть инициализированы в __init__ or __new__ .

Итак, вы должны установить его в любом случае, если собираетесь это сделать, и в этом случае он появится в dir .