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

来源:廖雪峰

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

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

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

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

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

>>> class MyObject(object):
...     def __init__(self):
...         self.x = 9
...     def power(self):
...         return self.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 (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: ‘MyObject‘ object has no attribute ‘z‘

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

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

也可以获得对象的方法:

>>> hasattr(obj, ‘power‘) # 有属性‘power‘吗?
True
>>> getattr(obj, ‘power‘) # 获取属性‘power‘
<bound method MyObject.power of <__main__.MyObject object at 0x108ca35d0>>
>>> fn = getattr(obj, ‘power‘) # 获取属性‘power‘并赋值到变量fn
>>> fn # fn指向obj.power
<bound method MyObject.power of <__main__.MyObject object at 0x108ca35d0>>
>>> fn() # 调用fn()与调用obj.power()是一样的
81
 
时间: 11-08

【python】isinstance可以接收多个类型,hasattr,getattr,setattr的相关文章

python 语法 内置函数 hasattr getattr setattr dir

参考: https://docs.python.org/3/library/functions.html?highlight=hasattr#getattr 例子1:针对类TestA 做属性操作 class TestA: def fun_1(self): print "fun_1" def fun_2(self): print "fun_2" def fun_2(): print "fun_3" test_a = TestA() print ha

Python hasattr,getattr,setattr,delattr

#!/usr/bin/env python# -*- coding:utf-8 -*-# 作者:Presley# 邮箱:[email protected]# 时间:2018-11-04# 反射使用import sysclass WebServer(object): def __init__(self,host,port): self.host = host self.port = port def start(self): print("Server is starting...")

python反射hasattr getattr setattr delattr

反射 : 是用字符串类型的名字 去操作 变量 相比于用eval('print(name)') 留有 安全隐患 反射 就没有安全问题 hasattr 语法: hasattr(object, name)object可以是对象,类,模块,当前Py文件.name是一个给字符串数据类型,可以是变量(属性),函数(方法).如果name在object中存在,则返回Ture,否则返回False. getattr与hasattr语法相同,返回的结果是对应name的值或函数. 反射对象的方法 a.func() re

Python:hasattr() getattr() setattr() 函数

hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. class test(): name="xiaohua" def run(self): return "HelloWord" >>> t=test() >>> hasattr(t, "name") #判断对象有name属性 True >>

python中hasattr getattr setattr用法

一:hasattr 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 >>> class test():  2 ...     name="xiaohua"  3 ...     def run(self):   4 ...             return "HelloWord"  5 ...   6 >>> t=te

Python的hasattr() getattr() setattr() 函数使用方法详解

最近用到对用户信息进行判断,看到这个方法的详解,感觉比较好,所以拿过来,让自己可以时常看看 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 getattr(object, name[,default])获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选.需要注意的是,如果是返回的对象的方法,返回的是方法的内存地

Python的hasattr() getattr() setattr() 函数

class C(object):     def __init__(self):         self.a = 'hello'         self.b = 'world'         self.foo = 100     def get(self):         return self.a if __name__ == '__main__':     c = C()     #判断一个对象里面是否有name属性或者name方法,返回BOOL值     print(hasattr

Python的hasattr() getattr() setattr()

hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 >>> class test(): 2 ... name="xiaohua" 3 ... def run(self): 4 ... return "HelloWord" 5 ... 6 >>> t=test() 7 >>&

Python的反射机制、hasattr() getattr() setattr() 函数使用方法详解

hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 >>> class test(): 2 ... name="xiaohua" 3 ... def run(self): 4 ... return "HelloWord" 5 ... 6 >>> t=test() 7 >>&