为了账号安全,请及时绑定邮箱和手机立即绑定

确定对象的类型?

确定对象的类型?

狐的传说 2019-07-01 11:02:57
确定对象的类型?是否有一种简单的方法来确定变量是列表、字典还是其他什么?我得到的对象可能是两种类型,我需要能够区分。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

要获取对象的类型,可以使用内置的type()功能。将对象作为唯一参数传递将返回该对象的类型:

>>> type([]) is listTrue>>> type({}) is dictTrue>>> type('') is strTrue>>> type(0) is intTrue>>> type({})<type 'dict'>>>> type([])<type 'list'>

当然,这也适用于自定义类型:

>>> class Test1 (object):
        pass>>> class Test2 (Test1):
        pass>>> a = Test1()>>> b = Test2()>>> type(a) is Test1True>>> type(b) is Test2True

请注意type()将只返回对象的直接类型,但无法告诉您有关类型继承的信息。

>>> type(b) is Test1False

要解决这个问题,您应该使用isinstance功能。当然,这也适用于内置类型:

>>> isinstance(b, Test1)True>>> isinstance(b, Test2)True>>> isinstance(a, Test1)True>>> isinstance(a, Test2)False>>> isinstance([], list)True>>> isinstance({}, dict)True

isinstance()通常是确保对象类型的首选方法,因为它也将接受派生类型。因此,除非您实际上需要类型对象(无论出于何种原因),否则使用isinstance()优先于type().

第二参数isinstance()还可以接受类型的元组,因此可以一次检查多个类型。isinstance如果对象属于以下任何类型,则返回true:

>>> isinstance([], (tuple, list, set))True


查看完整回答
反对 回复 2019-07-01
?
万千封印

TA贡献1891条经验 获得超3个赞

你可以用type():

>>> a = []>>> type(a)<type 'list'>>>> f = ()>>> type(f)<type 'tuple'>


查看完整回答
反对 回复 2019-07-01
?
慕后森

TA贡献1802条经验 获得超5个赞

在对象的实例中,您还拥有:

__class__

属性。下面是从Python3.3控制台获取的示例

>>> str = "str">>> str.__class__<class 'str'>>>> i = 2>>> i.__class__<class 'int'>>>> class Test():...     pass...>>> a = Test()>>> a.__class__<class '__main__.Test'>

请注意,在python 3.x和New样式类(可以从Python2.6中任意选择)中,类和类型已经合并,这有时会导致意外的结果。主要出于这个原因,我最喜欢的测试类型/类的方法是等实例内置功能。


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 515 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信