Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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—如何重用具有有限字段数的数据类?_Python_Python 3.x_Unit Testing_Testing - Fatal编程技术网

Python—如何重用具有有限字段数的数据类?

Python—如何重用具有有限字段数的数据类?,python,python-3.x,unit-testing,testing,Python,Python 3.x,Unit Testing,Testing,我有一个包含许多字段的数据类,我需要在测试中使用它。因此,我决定扩展该类,并使用测试所需的有限字段对其进行初始化。但这会在创建测试数据类时导致错误: self.metrics_provider = TestMetricsProvider(data) E TypeError: __init__() missing 3 required positional arguments: 'class_name', 'type', and 'score' 基本数据类: @dataclass c

我有一个包含许多字段的数据类,我需要在测试中使用它。因此,我决定扩展该类,并使用测试所需的有限字段对其进行初始化。但这会在创建测试数据类时导致错误:

self.metrics_provider = TestMetricsProvider(data)
E       TypeError: __init__() missing 3 required positional arguments: 'class_name', 'type', and 'score'
基本数据类:

@dataclass
class MetricsProvider:
    name: str
    class_name: str
    type: str
    score: str
    source: str
    location: str = DEFAULT_LOCATION
    algorithm: Optional[str] = None
@dataclass
class TestMetricsProvider(MetricsProvider):
    pass

data = dict(
    name="test",
    class_name="test_class",
    type="test_type"
    score="test_score",
    source="test_source")

class TestMetrics(unittest.TestCase):
    def setUp(self) -> None:
        self.metrics_provider = TestMetricsProvider(data)
测试中的数据类:

@dataclass
class MetricsProvider:
    name: str
    class_name: str
    type: str
    score: str
    source: str
    location: str = DEFAULT_LOCATION
    algorithm: Optional[str] = None
@dataclass
class TestMetricsProvider(MetricsProvider):
    pass

data = dict(
    name="test",
    class_name="test_class",
    type="test_type"
    score="test_score",
    source="test_source")

class TestMetrics(unittest.TestCase):
    def setUp(self) -> None:
        self.metrics_provider = TestMetricsProvider(data)
如下所示定义测试数据类导致错误:
E TypeError:\uuuu init\uuuuu()接受1个位置参数,但给出了2个

@dataclass
class TestMetricsProvider(MetricsProvider):
    def __init__(self):
        super().__init__()

在这种情况下,我应该如何正确地创建它?或者,它可能会被嘲笑?

将您的值字典作为关键字参数传递(又称kwargs):

类TestMetrics(unittest.TestCase):
def设置(自身)->无:
self.metrics\u provider=TestMetricsProvider(**数据)

数据类的构造函数期望字段的实际值作为关键字参数。使用
TestMetricsProvider(数据)
时,将
data
字典作为第一个字段
name
的值传递,使其与
TestMetricsProvider(name=data)
类似,谢谢!成功了。离开TestMetricsProvider而不使用init方法是否正确,只需使用
pass
?@samba是的,您不需要重写
\uuuu init\uu
方法。