python-3.x - 如何在 Python 3.7.x 中使用带有 @dataclass 的 list[customClass] 作为类型

标签 python-3.x oop python-dataclasses

我有以下数据类。

@dataclass
class Package:
    '''Class for keeping track of one destination.'''
    _address: []

@dataclass
class Destination:
'''Class for keeping track of a destination.'''
_start: str
_end: str
_distance: float

def __init__(self, param):
    self._start = param[0]
    self._end = param[1]
    self._distance = param[2]

以及调用上述类的以下数据类。
@dataclass
class DestinationContainer:
    '''Class for keeping track of a package destination.
       and all the possible combinations of potential next destination '''
    _package: Package
    _destinations: List[Destination]

    def __init__(self):
        pass

    def addPkg(self,param):
        self._package = param

尝试运行程序时出现以下错误

TypeError: Parameters to generic types must be types.



我也曾尝试拨打 _destinations成员(member)这样。
_destinations: List[Destination] = field(default_factory=list)

然后我收到以下错误

TypeError: Parameters to generic types must be types.



我也尝试将类(class)成员设置为
    _destinations: [] 

在检查实例对象时,类中没有可用的列表。

我也试过了。
_destinations: List = field(default_factory=lambda: [])

尝试添加到列表时出现以下错误

AttributeError: 'DestinationContainer' object has no attribute '_destinations'

最佳答案

正如帕特里克在评论中所说,您的主要问题是您定义自己的 __init__使用时的函数 @dataclass .如果您删除它并稍微重组您的代码,它应该会按预期工作:

from dataclasses import dataclass
from typing import List

@dataclass
class Package:
    _address: List[str]

@dataclass
class Destination:
    _start: str
    _end: str
    _distance: float

@dataclass
class DestinationContainer:
    _package: Package
    _destinations: List[Destination]

    def addPkg(self, param):
        # sure this shouldn't be "self._package.append(param)"? 
        self._package = param


# works
dc = DestinationContainer(
    Package(['some address']),
    [Destination('s', 'e', 1.0)]
)
# also works
dc.addPkg(Package(['some other address']))

关于python-3.x - 如何在 Python 3.7.x 中使用带有 @dataclass 的 list[customClass] 作为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54140585/

相关文章:

python - 启动器中的 fatal error : Unable to create process using '"' in python

python-3.x - Python 3 keras : UnpicklingError: pickle data was truncated for partly downloaded keras cifar10 dataset

python - 什么是 __del__ 方法以及如何调用它?

java - 是否有理由在忽略返回值的情况下调用 obj.getClass() ?

python-3.x - 如何使用 IQR 从 DataFrame 中删除异常值?

python - python 中的 __str__ 方法

javascript - 找不到此 JavaScript 代码中的错误所在。对 'class'语法不太熟悉

python - 是否可以在 __post_init__() 或更高版本中卡住数据类对象?

python - 使 Python json 编码器支持 Python 的新数据类

python - 一起使用数据类和属性时出现奇怪的问题