Возможно ли иметь встроенное определение класса данных в Python?Python

Программы на Python
Anonymous
Возможно ли иметь встроенное определение класса данных в Python?

Сообщение Anonymous »

Предварительное примечание: Первые три примера полностью работоспособны. Мой вопрос: если я объявляю классы данных, которые используются только один раз внутри другого класса данных, могу ли я избежать «правильного» объявления вложенного класса данных в пользу «встроенного» объявления?
Я хочу использовать вложенные классы данных, потому что это упрощает доступ к атрибутам в моей IDE, т. е. я хочу иметь возможность использовать точечную нотацию, например MyNestedDataclass., и моя IDE предложит group_1 и group_2.

Я хочу определить вложенный словарь и использовать функцию Dataclass для точечной записи - главным образом потому, что моя программа проверки типов затем предлагает поля. Вот структура данных, к которой я стремлюсь:
my_nested_dict = {
"group_1": {
"variable_1a":10,
"variable_1b":True,
},
"group_2": {
"variable_2a":"foo",
}
}

В настоящее время я делаю это:
@dataclass
class Group1:
variable_1a: int = 10
variable_1b: bool = True

@dataclass
class Group2:
variable_2a: str = "foo"

@dataclass
class MyNestedDataclass:
group_1: Group1
group_2: Group2

Я пробовал этот шаблон, но он приводит к тому, что моя программа проверки типов не знает, какие ключи следует разрешить в MyNestedDataclass.group_1 и MyNestedDataclass.group2, и я невозможно получить к нему доступ, например MyNestedDataclass.group_1.variable_1a:
@dataclass
class MyNestedDataclass:
group_1: dict[str, Any] = field(default_factory=lambda:{
"variable_1a":10,
"variable_1b":True,
})
group_2: field(default_factory=lambda:{
"variable_2a":"foo",
})

Это кажется маловероятным, но есть ли что-то вроде этого:
@dataclass
class MyNestedDataclass:
group_1: Group1 = field(default_factory=lambda: dataclass(
variable_1a: int = 10
variable_1b: bool = True
))

group_2: Group2= field(default_factory=lambda: dataclass(
variable_2a: str = "foo"
))


Подробнее здесь: https://stackoverflow.com/questions/786 ... -in-python

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