您的位置:首页 > 编程语言 > Python开发

【python】isinstance可以接收多个类型,hasattr,getattr,setattr

2016-11-09 20:51 405 查看
来源:廖雪峰

可以判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是str或者unicode

>>>isinstance('a',(str,unicode))
True
>>>isinstance(u'a',(str,unicode))
True

由于
str
unicode
都是从
basestring
继承下来的,所以,还可以把上面的代码简化为:

>>>isinstance(u'a',basestring)
True

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

>>>classMyObject(object):
...def__init__(self):
...self.x=9
...defpower(self):
...returnself.x*self.x
...
>>>obj=MyObject()

紧接着,可以测试该对象的属性:

>>>hasattr(obj,'x')#有属性'x'吗?
True
>>>obj.x
9
>>>hasattr(obj,'y')#有属性'y'吗?
False
>>>setattr(obj,'y',19)#设置一个属性'y'
>>>hasattr(obj,'y')#有属性'y'吗?
True
>>>getattr(obj,'y')#获取属性'y'
19
>>>obj.y#获取属性'y'
19

如果试图获取不存在的属性,会抛出AttributeError的错误:

>>>getattr(obj,'z')#获取属性'z'
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
AttributeError:'MyObject'objecthasnoattribute'z'

可以传入一个default参数,如果属性不存在,就返回默认值

>>>getattr(obj,'z',404)#获取属性'z',如果不存在,返回默认值404
404

也可以获得对象的方法:

>>>hasattr(obj,'power')#有属性'power'吗?
True
>>>getattr(obj,'power')#获取属性'power'
<boundmethodMyObject.powerof<__main__.MyObjectobjectat0x108ca35d0>>
>>>fn=getattr(obj,'power')#获取属性'power'并赋值到变量fn
>>>fn#fn指向obj.power
<boundmethodMyObject.powerof<__main__.MyObjectobjectat0x108ca35d0>>
>>>fn()#调用fn()与调用obj.power()是一样的
81


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: