Ошибка при вызове оснований метакласса: функция () аргумент 1 должна быть кодом, не ул.

Я пытался разделить поточную обработку на подклассы. Условие ранее сегодня, но это не удалось. Вот вывод интерпретатора Python, когда я пытаюсь разделить поточную обработку на подклассы. Класс условия:

>>> import threading
>>> class ThisWontWork(threading.Condition):
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
    function() argument 1 must be code, not str

Кто-то может объяснить эту ошибку? Спасибо!

43
задан David Underhill 9 February 2010 в 18:24
поделиться

2 ответа

Вы получаете это исключение, потому что, несмотря на название, похожее на класс, threading.Condition является функцией, а вы не можете создавать подклассы функций.

>>> type(threading.Condition)
<type 'function'>

Это не очень полезное сообщение об ошибке было поднято в багтрекере Python, но оно было помечено как "не будет исправлено"

.
77
ответ дан 26 November 2019 в 22:31
поделиться

Другая проблема, чем у OP, но вы также можете получить эту ошибку, если попытаетесь создать подкласс из модуля вместо класса (например, вы попытаетесь унаследовать My.Module вместо My.Module. Класс). Престижность этот пост за то, что помог мне разобраться в этом.

TypeError: Ошибка при вызове баз метаклассов

Для этого ответ заключается в том, что вы, вероятно, назвали класс python то же самое, что и модуль (т.е. файл), в котором он находится. Затем вы импортировал модуль и попытался использовать его как класс. Ты сделал это потому что вы, как и я, вероятно, не так долго были Java-программистом тому назад :-). Способ исправить это - импортировать module.class вместо просто модуль. Или, ради здравого смысла, измените имя класса или модуль, чтобы было более очевидно, что импортируется.

27
ответ дан 26 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: