Есть ли способ проверить, содержит ли param класс или экземпляр класса? - PullRequest
0 голосов
/ 28 октября 2009

Я хочу, чтобы оболочка my_function могла получать либо класс, либо экземпляр класса, а не писать две разные функции:

>>> from module import MyClass

>>> my_function(MyClass)

True

>>> cls_inst = MyClass()

>>> my_function(cls_inst)

True

проблема в том, что я не знаю заранее, какой тип классов или экземпляров классов я собираюсь получить. Так что я не могу, например, использовать такие функции, как isinstance ...

Как я могу проверить тип, если параметр содержит класс или экземпляр класса, в общем виде?

Есть идеи?

Ответы [ 3 ]

7 голосов
/ 28 октября 2009
>>> class A: pass

>>> isinstance(A, type)
True
>>> isinstance(A(), type)
False
1 голос
/ 28 октября 2009
import types

def myfun(maybe_class):
    if type(maybe_class) == types.ClassType:
        print "It's a class."
    else:
        print "It's an instance."
0 голосов
/ 28 октября 2009

Используйте функцию типа () buitlin.

например:.

import avahi
print type(avahi)

<type 'module'>
...