Python 数据类给我 'function' 对象没有属性 '__mro__'?
Python Dataclass gives me 'function' object has no attribute '__mro__'?
如上一题: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) ] )
所以现在我正在考虑设计自己的数据 类。然而在测试代码中我遇到了一个 '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)
如上一题: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) ] )
所以现在我正在考虑设计自己的数据 类。然而在测试代码中我遇到了一个 '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)