Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python 3.7.x中,如何将列表[customClass]用作@dataclass的类型_Python 3.x_Oop_Python Dataclasses - Fatal编程技术网

Python 3.x 在Python 3.7.x中,如何将列表[customClass]用作@dataclass的类型

Python 3.x 在Python 3.7.x中,如何将列表[customClass]用作@dataclass的类型,python-3.x,oop,python-dataclasses,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):

我有以下数据类

@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

@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:泛型类型的参数必须是类型

我也尝试过用这种方式呼叫
\u destinations
成员

_destinations: List[Destination] = field(default_factory=list)
然后我得到以下错误

TypeError:泛型类型的参数必须是类型

我还尝试将类成员设置为

    _destinations: [] 
检查实例对象后,类中没有可用的列表

我也试过了

_destinations: List = field(default_factory=lambda: [])
当我尝试添加到列表时,出现以下错误

AttributeError:“DestinationContainer”对象没有属性“\u destinations”


正如Patrick在评论中所说,您的主要问题是在使用
@dataclass
时定义了自己的
\uuuu init\uuu
函数。如果您删除它并稍微重新构造代码,它将按预期工作:

from dataclasses import dataclass
from typing import List

@dataclass
class Package:
    _address: []

@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']))

目的地是如何定义的?该错误抱怨
List[Destination]
,因为它认为
Destination
不是一种类型。此外,您根本不应该定义自己的
\uuuuu init\uuuu
@dataclass
将为您创建一个。如果你需要做更多的事情,你应该使用。