#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
.