パラメータにクラスまたはクラスインスタンスが含まれているかどうかを確認する方法はありますか?

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

  •  08-07-2019
  •  | 
  •  

質問

2つの異なる関数を記述する代わりに、ラッパーmy_functionがクラスまたはクラスインスタンスのいずれかを受信できるようにします。

>>> from module import MyClass

>>> my_function(MyClass)

True

>>> cls_inst = MyClass()

>>> my_function(cls_inst)

True

問題は、どのタイプのクラスまたはクラスインスタンスを受け取るか事前にわからないことです。たとえば、isinstanceなどの関数を使用することはできません...

一般的な方法で、paramにクラスまたはクラスインスタンスが含まれているかどうかを確認するにはどうすればよいですか?

アイデアはありますか

役に立ちましたか?

解決

>>> 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