AttributeError для типа, для которого определен атрибут [закрыто] ⇐ Python

Программы на Python
Anonymous
AttributeError для типа, для которого определен атрибут [закрыто]

Сообщение Anonymous »

Обратите внимание на следующее:

Код: Выделить всё

from argparse import ArgumentParser, Namespace

def parse_args() -> Namespace:
parser = ArgumentParser()
parser.add_argument('x')
return parser.parse_args()

args = parse_args()
print('X =', args.x)
Вызов этого скрипта как ./script.py 4 работает должным образом:

X = 4

Теперь, если я обновлю это до:

Код: Выделить всё

import typing as t
from argparse import ArgumentParser

class MyArgs:
x: str

def parse_args() -> MyArgs:
parser = ArgumentParser()
parser.add_argument('x')
return t.cast(parser.parse_args(), MyArgs)

args = parse_args()
print('X =', args.x)
Тогда вызов этого сценария, например ./script.py 4, завершается неудачей со следующим:

Код: Выделить всё

Traceback (most recent call last):
File "..." in 
print('X =', args.x)
^^^^^^
AttributeError: type object 'MyArgs' has no attribute 'x'
Почему это происходит? Насколько я понимаю, typing.cast возвращает значение без изменений (согласно документации), так почему же это вдруг перестает работать?
Или может ли это быть так? возможно, что-то не так с типом MyArgs, но если да, то что? Я использую его просто как подсказку типа и ничего больше.

Подробнее здесь: https://stackoverflow.com/questions/790 ... te-defined

Вернуться в «Python»