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()
判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。
</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()
函数,它返回一个包含字符串的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