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

StackOverflow https://stackoverflow.com/questions/1638657

  •  08-07-2019
  •  | 
  •  

Вопрос

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

>>> from module import MyClass

>>> my_function(MyClass)

True

>>> cls_inst = MyClass()

>>> my_function(cls_inst)

True

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

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

Есть какие-нибудь идеи?

Это было полезно?

Решение

>>> class A: pass

>>> isinstance(A, type)
True
>>> isinstance(A(), type)
False

Другие советы

import types

def myfun(maybe_class):
    if type(maybe_class) == types.ClassType:
        print "It's a class."
    else:
        print "It's an instance."

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

Например.:

import avahi
print type(avahi)

<type 'module'>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top