检查是否有类对象

时间:2013-08-28 22:54:20

标签: python

是否可以在python中检查对象是否是类对象。如果你有IE浏览器

class Foo(object):
    pass

你怎么能检查o是Foo(或其他类)还是Foo(或任何其他类实例)的实例?在Java中,这将是一件简单的事情。只需检查对象是否是Class的实例。在python中有类似的东西,或者你应该不关心它?

略微澄清:我正在尝试创建一个函数来打印有关其给定参数的信息。因此,如果你传入o,其中o = Foo(),它打印出有关Foo的信息。如果你传入Foo,它应该打印出完全相同的信息。不是关于Type的信息。

4 个答案:

答案 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)

您还可以使用它将oobject

进行比较
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)