Python Dataclass дает мне объект 'function' не имеет атрибута __mro__?
Как и в последнем вопросе: TypeError: объект int не является итеративным, пока не существует итераций? Я нахожу проблему в моей программе. То есть: в Python
set( (0,0) )
на самом деле дает вам{0}
, но я хочу{(0,0)}
collections.deque( ((0, 0), [ (0, 0) ] ) ).popleft()
на самом деле дает вам(0,0)
тогда как я хочу((0, 0), [ (0, 0) ] )
Так что теперь я думаю о разработке собственных классов данных. Тем не менее, в тестовом коде я обнаружил, что у объекта 'function' нет проблемы с атрибутом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 ошибка scrrenshot:
Моя версия Python - Anaconda 3.6.8
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)