2010-03-17 2 views
-3

У меня нет идеи относительно того, почему я получаю эту ошибку.Может кто-то объяснить, что именно означает эта ошибка, TypeError: issubclass() arg 1 должен быть классом

+0

Ошибка кажется довольно ясной. Возможно, вам следует опубликовать код, который, по вашему мнению, должен работать, но этого не происходит. –

+0

Кроме того, существует очень мало причин использовать 'issubclass'. –

+0

Возможно, вы имели смысл использовать 'isinstance()' вместо этого? –

ответ

2

Это означает, что вы не предоставляете класс в качестве аргумента для issubclass(). Оба аргумента должны быть классами. Второй аргумент также может быть кортежем классов.

Если вы покажете код, который вызывает эту ошибку, мы можем помочь дальше.


От documentation:

issubclass(class, classinfo)
Return true if class is a subclass (direct or indirect) of classinfo . A class is considered a subclass of itself. classinfo may be a tuple of class objects, in which case every entry in classinfo will be checked. In any other case, a TypeError exception is raised.

+0

@Felix: У меня есть класс клуба и класс manager.Club имеет атрибут Manager, где должен храниться экземпляр класса менеджера.Я написал функции для отношений наоборот. Я думаю, что эти функции приводят к выдаче ошибки issubclass – gizgok

+0

@gizgok: Без кода это действительно сложно помочь. –

5

, как люди говорили, что 2 аргументы issubclass() должны быть классы, а не экземпляры объекта.

рассмотреть этот пример:

>>> issubclass(1, int) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: issubclass() arg 1 must be a class 
>>> issubclass(type(1), int) 
True  
>>> isinstance(1, int) 
True 

ключ является использование функции type() получить тип экземпляра для использования с функцией issubclass(), которая, как отмечается в другом комментарии, что эквивалентно вызову isinstance()

+0

Конечно, классы * являются * объектами. –

+0

ну, ты прав ... я не хочу путать очевидного новичка в питоне. я должен был использовать «экземпляры объекта» (исправьте меня, если я ошибаюсь) –

0

В основном этот метод сообщает вам, является ли первый параметр подклассом второго. Поэтому, естественно, оба параметра должны быть классами. По вашему звонку, вы вызвали issubclass без каких-либо параметров, что смущает интерпретатора.

Вызов issubclass походит на запрос переводчика: «Эй, этот класс является подклассом этого другого класса?». Однако, поскольку вы не предоставили два класса, вы, по сути, попросили интерпретатора: «Эй, я не собираюсь вам ничего показывать, но скажите мне, это ли это подкласс». Это смущает интерпретатора, и именно поэтому вы получаете эту ошибку.

Смежные вопросы