【python】获取对象的类型和信息

使用type()

Python把每种type类型都定义好了常量,放在types模块里,使用之前,需要先导入。基本类型都可以用type()判断:

>>> import types
>>> type('abc')==types.StringType
True
>>> type(str)==types.TypeType
True
>>> type(int)==type(str)==types.TypeType
True

最后注意到有一种类型就叫TypeType,所有类型本身的类型就是TypeType

使用isinstance()

isinstance()可以告诉我们,一个对象是否是某种类型。isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。

</pre><pre name="code" class="python">>>> isinstance('a', (str, unicode))
True
>>> isinstance(u'a', (str, unicode))
True

#由于str和unicode都是从basestring继承下来的,所以,还可以把上面的代码简化为:
>>> isinstance(u'a', basestring)
True

使用dir()

如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:

>>> dir('sss')
['__add__', '__class__', '__contains__','__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__','__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__','__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__','__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__','__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__','capitalize', 'casefold', 'center', 'count', 'encode', 'endswith','expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha','isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable','isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans','partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit','rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title','translate', 'upper', 'zfill']

类似__xxx__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的:

>>> len('ABC')
3
>>> 'ABC'.__len__()
3

我们自己写的类,如果也想用len(myObj)的话,就自己写一个__len__()方法:

>>> class MyObject(object):
...     def __len__(self):
...         return 100
...
>>> obj = MyObject()
>>> len(obj)
100

仅仅把属性和方法列出来是不够的,配合getattr()setattr()以及hasattr(),我们可以直接操作一个对象的状态:

#定义一个类
>>> class obj(object):  
       def__init__(self,x,y):
              self.x=x
              self.y=y        
#实例化一个类
>>> m=obj(3,4)
#判断是否有x
>>> hasattr(m,'x')
True
#获得x 的值
>>> getattr(m,'x')
3
#重新设置x的值
>>> setattr(m,'x',90)
>>> m.x
90
#如果不存在’s’,则返回404
>>> getattr(m,'s',404) 
404

 

 

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值