正常情况下,当调用类的方法或属性时,如果不存在,就会报错 要避免这个错误,除了可以加上那个要调用但不存在的属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性...只有在没有找到属性的情况下,才调用__getattr__,已有的属性会直接在类属性里查找,不会在__getattr__中查找 class Student(object):...def __init__(self): self.name = 'Michael' def __getattr__(self, attr):...Student() print(s.name) #输出:'Michael' print(s.score) #输出:99,当调用不存在的score属性时,Python解释器会调用__getattr...这样就会返回score的值 s.age() #输出:25,返回函数也是完全可以的 print(s.abc) #输出:None,任意调用如s.abc都会返回None,因为定义的__getattr
参考链接: Python setattr() Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name) 判断一个对象里面是否有...return "HelloWord" 5 ... 6 >>> t=test() 7 >>> getattr(t, "name") #获取name属性,存在就打印出来。 ...8 'xiaohua' 9 >>> getattr(t, "run") #获取run方法,存在就打印出方法的内存地址。...10 > 11 >>> getattr(t, "run")() #获取run...12 'HelloWord' 13 >>> getattr(t, "age") #获取一个不存在的属性。
This is done by calling getattr(obj, name) and catching AttributeError. """ pass 返回对象是否具有具有给定名称的属性...这是通过调用 并捕获AttributeError来完成的 getattr(obj,name) getattr def getattr(object, name, default=None):...""" getattr(object, name[, default]) -> value Get a named attribute from an object; getattr...# getattr print(getattr(blog, "name")) # 实例对象-实例属性 print(getattr(blog, "sum")) # 实例对象-类属性 print(getattr...(PoloBlog, "sum")) # 类对象-类属性 print(getattr(PoloBlog, "name", "默认值")) # 类对象-实例属性 # 输出结果 小菠萝 0 0 默认值
原创博客,如需转载,请联系作者 在使用Python的过程中可能遇到以下几个函数: getattr __getattr__ __getattribute__ __get__ 它们的用法是怎样的呢?...getattr getattr (object, name[, default])是Python的内置函数之一,它的作用是获取对象的属性。...self.x = x ... >>> f = Foo(10) >>> getattr(f, 'x') 10 >>> f.x 10 >>> getattr(f, 'y', 'bar') 'bar' _ _..._getattr _ __ object....如果类还同时定义了__getattr__()方法,则不会调用__getattr__()方法,除非在__getattribute__()方法中显示调用__getattr__()或者抛出了AttributeError
__setattr__(self, key, value)#正常设置呗 def __getattr__(self, name): try: print "__getattr__被调用" return object...---- setattr()和getattr() 接下来是对setattr()和getattr()的分析,刚开始学总容易把这个方法和上述的__setattr__()搞混,接下来演示下setattr()和...getattr()方法的使用。...(gsa,'num')#也可以用实例gsa print getattr(gsa,'y','获取不到y属性') #getattr(类名,'属性','没有这个属性输出这里') #也可以用try,except...--------------getattr(gsa,'num')-------------- 9 --------getattr(gsa,'y','获取不到y属性')-------- 获取不到y属性
查看一些博客和文章后,发现想要彻底理解getattr和getattribute的区别,实际上需要理解python中属性的查找顺序、描述器(descriptor)、__get__、__set__、__dict...__getattribute__(self, item) def __getattr__(self, item): print('2 getattr called, item...下面继续使用上方代码验证__getattr__、非描述器的执行顺序。...到这里我们也就了解到了python中属性的查找顺序、getattribute和getattr的执行顺序。...__getattribute__ at 0x0000021FD20B5AE8>, '__getattr__': <function T.
VBA的GetAttr函数将返回文件的基本属性。注意,由于它是一个函数,因此输出一个值;它不是文件对象的属性,不能写入GetAttr来更改文件的属性。同样,也不能使用此函数将文件设为只读或隐藏文件。...假设文件myFile是隐藏的,且是该文件唯一的一个属性,从上表中可知,语句GetAttr(myFile)将返回2。 更复杂一点的是隐藏的系统文件。...此时,必须在总和中包含4和2,因此输出为6:GetAttr(myFile) =vbHidden + vbSystem = 6。 隐藏目录的值是多少?...小结 VBA的GetAttr函数使用求和技术提供有关文件属性的信息,该技术为每个属性组合提供唯一编号。...同时,VBA的GetAttr函数是一个函数,而不是文件属性,因此不能使用它来更改文件属性,只能使用它来确定存在哪些文件属性。 可以使用按位AND运算符确定是否存在特定属性。
描述getattr() 函数用于返回一个对象属性值。语法getattr 语法:getattr(object, name[, default])参数object -- 对象。...实例以下实例展示了 getattr 的使用方法:>>>class A(object):... bar = 1...>>> a = A()>>> getattr(a, 'bar') # 获取属性 bar...值1>>> getattr(a, 'bar2') # 属性 bar2 不存在,触发异常Traceback (most recent call last): File "", line...1, in AttributeError: 'A' object has no attribute 'bar2'>>> getattr(a, 'bar2', 3) # 属性 bar2
请用代码说明hasattr、getattr和setattr的作用 ''' hasattr: 可以判断一个对象是否包含某个属性 getattr: 可以获取对象中某一个属性的值 setattr: 可以设置对象中某一个属性的值...print('存在show方法') person = Person() setattr(person, 'sex', '男') setattr(person, 'age', 21) print(getattr...(person, 'sex')) print(getattr(person, 'age')) print(getattr(person, 'name')) person.show() 存在show方法
今天开发验证码验证功能,需要将手机号和对应的验证码设置到session中以便后面的验证,具体代码如下:
2.反射(hasattr,getattr,setattr,delattr) 反射就是通过字符串来操作类或者对象的属性 反射本质就是在使用内置函数,其中反射有以下四个内置函数: 1. hasattr:判断一个方法是否存在与这个类中...2. getattr:根据字符串去获取obj对象里的对应的方法的内存地址,加"()"括号即可执行 3. setattr:通过setattr将外部的一个函数绑定到实例中 4. delattr:删除一个实例或者类中的方法...1.hasattr 用法: print(hasattr(对象,对象的方法或者特征),)后面内容必须为字符串的格式,如果有返回True,没有返回False 2.getattr 用法: print(getattr
user.info调用 def info(self): return [self.username,self.password] user= User() print(user.info) getattr...() 如果存在getattr()的定义,访问object不存在的属性时会调用该方法,相当于php的__get()魔法函数 不存在定义时,访问不存在的属性会报 AttributeError class...has no attribute 'passwd' class User: def __init__(self): self.uname='admin' def __getattr
None getattr getattr(object, name[,default]) 获取 属性数值。...时,返回 属性数值 assert getattr(t, 'city') == 'Nanjing' assert getattr(t, 'run') # getattr 在属性 不存在 时,有 指定默认输出值...的情况下,返回 默认输出值 assert getattr(t, 'year', 'Not found') == 'Not found' # getattr 在属性 不存在 时,没有 指定默认输出值...的情况下,返回 AttributeError try: getattr(t, 'year') except AttributeError: pass # getattr 和 setattr...的联合使用 assert getattr(t, 'year', setattr(t, 'year', '2017')) == '2017' assert getattr(t, 'year') == '
Python提供了dir,hasattr,getattr,setattr,vars等函数,可以帮助我们操作和使用对象的属性。...print(getattr(wo, 'name')) # print(getattr(wo, 'friend')) print(getattr(wo, 'friend', 'me')) shop = getattr...如果是对象没有的属性,我们可以设置默认值,则getattr会返回这个默认值。 getattr获取对象的方法时,会返回一个方法对象,我们可以像执行函数一样执行这个方法。 ?...setattr(wo, 'height', 1.66) print(getattr(wo, 'height')) setattr(wo, 'home', 'sz') print(getattr(wo,...这个函数的实现方法是调用getattr(object, name) 函数,看看是否抛出AttributeError异常。
前言 当实例对象调用一个不存在的属性时,系统通常会报错,那有啥办法避免这种现象么,或者说自定义报错信息,答案是肯定的,我们可以通过定义__getattr__(self,name)魔法方法来实现。...__getattr__(self, name) __getattr__(self,name) 定义当用户获取一个不存在的属性时的行为。...__(self,name)方法,一旦属性查找失败,就会调用__getattr__(self,name)方法: >>> class Animal(): ......def __getattr__(self,name): ......这边也来说下调用__getattr__的详细过程: 1.在对象的实例属性中寻找,找不到执行下一步2.在的类中查找类属性,找不到执行下一步3.在对象的继承链上寻找,找不到执行下一步4.调用__getattr
__getattr__ 正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。...AttributeError: 'Student' object has no attribute 'score' 写一个__getattr__()方法,动态返回一个属性。...__,已有的属性,比如name,不会在__getattr__中查找。...此外,注意到任意调用如s.abc都会返回None,这是因为我们定义的__getattr__默认返回就是None。..._path = path def __getattr__(self, path): return Chain('%s/%s' % (self.
最终笔者通过python内置的getattr方法,实现了这个功能,方法非常简单,在这里分享一下。...---- 首先是对getattr方法的简单介绍 Python getattr() 函数介绍 描述 getattr() 函数用于返回一个对象属性值。...语法 getattr 语法: getattr(object, name[, default]) 参数 object -- 对象。 name -- 字符串,对象属性。...实例 以下实例展示了 getattr 的使用方法: >>>class A(object): ....... >>> a = A() >>> getattr(a, 'bar') # 获取属性 bar 值 1 >>> getattr(a, 'bar2') # 属性 bar2 不存在
http://www.runoob.com/python/python-func-hasattr.html
. >>> t=test() >>> hasattr(t, "name") #判断对象有name属性 True >>> hasattr(t, "run") #判断对象有run方法 True >>> getattr...return "HelloWord" ... >>> t=test() >>> getattr(t, "name") #获取name属性,存在就打印出来。...'xiaohua' >>> getattr(t, "run") #获取run方法,存在就打印出方法的内存地址。...'HelloWord' >>> getattr(t, "age") #获取一个不存在的属性。...(t, "age", setattr(t, "age", "18")) #age属性不存在时,设置该属性 '18' >>> getattr(t, "age") #可检测设置成功 '18' >>> 作者
__get__,__getattr__和__getattribute都是访问属性的方法,但不太相同。 object....__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常。 object....如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发AttributeError异常) object....__getattribute__(self, name) def __getattr__(self, name): print("__getattr__() is called...而当属性不存在时,仍然需要访问__getattribute__,不过接着要访问__getattr__。这就好像是一个异常处理函数。
领取专属 10元无门槛券
手把手带您无忧上云