Python:如何创建超类为空且继承自type.NamedTuple的对象?

问题描述

我想建立一个抽象,我只希望在应用程序的某些部分传递Foo的子数据类型。所有这些实际上都键入NamedTuples,因为它们没有功能。这使我从Foo继承了typing.NamedTuple,并且没有向Foo添加任何其他功能。我的问题是在实例化Foo的子类型时,遇到一个错误

考虑以下代码

from typing import NamedTuple


class Foo(NamedTuple):
    pass


class Bar(Foo):
    a: int
    b: str
        
        
class Baz(Foo):
    one_thing: float
    another_thing: float

bar = Bar(4,"sdlfkjsdfkj")
print(bar)

代码段的输出将是以下错误...

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-b0f9b9293905> in <module>
     15     another_thing: float
     16 
---> 17 bar = Bar(4,"sdlfkjsdfkj")
     18 print(bar)

TypeError: __new__() takes 1 positional argument but 3 were given

但是,如果我让Bar直接继承自typing.NamedTuple,那么我可以获取以下代码段以使其正常运行

class Bar(NamedTuple):
    a: int
    b: str
        
bar = Bar(4,"sdlfkjsdfkj")
print(bar)
>>> Bar(a=4,b='sdlfkjsdfkj')

这是否意味着对于每个数据类定义(例如BarBaz),我都必须继承自typing.NamedTuple?为什么我不能将其排除在顶级课程之外?

非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)