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, Namespace
from dataclasses import dataclass

@dataclass
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)
Тогда это не удается со следующим:

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

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 ... e-declared
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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