Python 数据类给我 'function' 对象没有属性 '__mro__'?

Python Dataclass gives me 'function' object has no attribute '__mro__'?

如上一题:TypeError: 'int' object is not iterable while no iteration exists?,我发现我的程序有问题。那是: 在 Python、

所以现在我正在考虑设计自己的数据 类。然而在测试代码中我遇到了一个 'function' object has no attribute "mro" 的问题。

测试代码1:

from dataclasses import dataclass
@dataclass
def DequeItems():
    current:tuple
    path:list

a=DequeItems(current=(0, 0),\
        path=[ (0, 0) ] )
print(a)

测试代码1错误截图:

测试代码2:

from dataclasses import dataclass

@dataclass(init=True)
def Pair():
    visit:tuple

a=Pair( visit=(0,0)) 
print(a)   

测试代码2错误截图:

我的Python版本是Anaconda 3.6.8

set 的参数必须是一个可迭代对象,其元素是所需的集合项。 set( (0,0) ) 有一个可迭代对象作为参数,但它的元素是 0 和 0,而不是元组 (0,0)。你需要set([(0,0)])deque也是如此;你需要一个可迭代的包含元组((0, 0), [ (0, 0) ] ),所以

collections.deque([((0, 0), [ (0, 0) ] )])

至于您看到的错误,function 没有 __mro__,因为它不需要。它的基础 class 始终是 object,并且您无法从 function 继承来创建一个 class,其 MRO 需要访问 function 的假设 MRO。

至于为什么你的数据class引发了这个错误,这是因为dataclass装饰器必须装饰一个class,不是函数。

from dataclasses import dataclass

@dataclass
class DequeItems:
    current:tuple
    path:list

a = DequeItems(
        current=(0, 0),
        path=[(0, 0)]
    )
print(a)