与上一个问题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)
我的Python版本是Anaconda 3.6.8
答案 0 :(得分:1)
set
的参数必须是可迭代的,并且其元素是所需的设置项。 set( (0,0) )
有一个可迭代的参数,但是其元素是0和0,而不是元组(0,0)
。您需要set([(0,0)])
。 deque
也是如此;您需要一个可迭代的包含元组((0, 0), [ (0, 0) ] )
,所以
collections.deque([((0, 0), [ (0, 0) ] )])
至于您看到的错误,function
没有__mro__
,因为它不需要一个。它的基类始终为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)