Как инициализировать 2D-список классов данных Python? - PullRequest
1 голос
/ 27 сентября 2019

Можно создать инициализатор по умолчанию для классов данных Python, инициализирующих двумерный массив, т. Е. Получая то же самое, что и

from dataclasses import dataclass, field
from typing import List
MAX = 5
@dataclass
class AlgoData:
    list2D: List[List[int]]  # = ???
    list1D: List[int] = field(default_factory=list)

b = [[] for m in range(MAX)]
a = AlgoData(b)

, но без аргумента b.Результат:

AlgoData(list2D=[[], [], [], [], []], list1D=[])

1 Ответ

2 голосов
/ 27 сентября 2019

Вы можете использовать функцию lambda вместо default_factory для field:

from dataclasses import dataclass, field
from typing import List
MAX = 5
@dataclass
class AlgoData:
    list2D: List[List[int]] = field(default_factory=lambda: [[] for m in range(MAX)])
    list1D: List[int] = field(default_factory=list)

a = AlgoData()

a становится:

AlgoData(list2D=[[], [], [], [], []], list1D=[])
...