是否可以在python中检查对象是否是类对象。如果你有IE浏览器
class Foo(object):
pass
你怎么能检查o是Foo(或其他类)还是Foo(或任何其他类实例)的实例?在Java中,这将是一件简单的事情。只需检查对象是否是Class的实例。在python中有类似的东西,或者你应该不关心它?
略微澄清:我正在尝试创建一个函数来打印有关其给定参数的信息。因此,如果你传入o,其中o = Foo(),它打印出有关Foo的信息。如果你传入Foo,它应该打印出完全相同的信息。不是关于Type的信息。
答案 0 :(得分:9)
使用isinstance
内置功能。</ p>
>>> o = Foo()
>>> isinstance(o, Foo)
True
>>> isinstance(13, Foo)
False
这也适用于子类:
>>> class Bar(Foo): pass
>>> b = Bar()
>>> isinstance(b, Foo)
True
>>> isinstance(b, Bar)
True
是的,通常情况下,您应该不特别关心对象的类型。相反,您只需在o
上调用所需的方法,以便人们可以插入符合您界面的任意对象。如果您要积极检查您正在使用的对象类型,则无法进行此操作。这个原则称为duck typing,允许您更自由地选择编写代码。
Python虽然实用,但如果对你的特定程序有意义,可以随意使用isinstance
。
编辑:
要检查某个变量是否是类与实例,您可以执行以下操作:
>>> isinstance(Foo, type) # returns true if the variable is a type.
True
>>> isinstance(o, type)
False
答案 1 :(得分:2)
我的最终目标是创建一个函数,打印出一个对象的信息(如果它是一个实例),并打印一个不同的东西(如果它是一个类)。所以这次我关心。
首先,要了解类是实例 - 它们是类型的实例:
>>> class Foo(object):
... pass
...
>>> isinstance(Foo, type)
True
因此,您可以通过这种方式选择类,但请记住,类也是实例。 (因此,您可以将类传递给函数,从函数中返回它们将它们存储在列表中,即时创建...)
答案 2 :(得分:0)
isinstance()函数
isinstance(o, Foo)
您还可以使用它将o
与object
In [18]: class Foo(object): pass
In [20]: o_instance = Foo()
In [21]: o_class = Foo
In [22]: isinstance(o_instance, Foo)
Out[22]: True
In [23]: isinstance(o_class, Foo)
Out[23]: False
In [24]: isinstance(o_instance, object)
Out[24]: True
In [25]: isinstance(o_class, object)
Out[25]: True
答案 3 :(得分:0)
我必须像Thanatos那样说并检查 isinstance(Foo,类型) 但是对于旧班级类型,你也必须这样做 isinstance(Foo,types.ClassType)