0

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

  • set( (0,0) )其实给你{0},但我想要{(0,0)}
  • collections.deque( ((0, 0), [ (0, 0) ] ) ).popleft()实际上给了你(0,0),而我想要((0, 0), [ (0, 0) ] )

所以现在我正在考虑设计自己的数据类。然而在测试代码中,我遇到了一个“函数”对象没有属性“ 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

4

1 回答 1

1

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

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

至于您看到的错误,function没有__mro__,因为它不需要。它的基类 always object,并且您不能继承function来创建一个其 MRO 需要访问function的假设 MRO 的类。

至于为什么您的数据类会引发该错误,这是因为dataclass装饰器必须装饰一个,而不是一个函数。

from dataclasses import dataclass

@dataclass
class DequeItems:
    current:tuple
    path:list

a = DequeItems(
        current=(0, 0),
        path=[(0, 0)]
    )
print(a)
于 2019-02-07T15:18:41.617 回答