参考链接: 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") #获取一个不存在的属性。
最近在使用python开发的过程中,想要实现通过字符串实现对函数的访问。在网上搜了一些方法,发现都不够简洁。...最终笔者通过python内置的getattr方法,实现了这个功能,方法非常简单,在这里分享一下。...---- 首先是对getattr方法的简单介绍 Python getattr() 函数介绍 描述 getattr() 函数用于返回一个对象属性值。...语法 getattr 语法: getattr(object, name[, default]) 参数 object -- 对象。 name -- 字符串,对象属性。...(a, 'bar2', 3) # 属性 bar2 不存在,但设置了默认值 3 >>> 通过字符串调用函数的实现 新建一个python脚本,命名 main.py import main as this
什么是反射 反射的概念是由 Smith 在 1982 年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省) Python 面向对象中的反射 通过字符串的形式操作对象的属性 Python...中一切皆为对象,所以只要是对象都可以使用反射 比如:实例对象、类对象、本模块、其他模块,因为他们都能通过 的方式获取、调用 对象.属性 反射中关键的四个函数 hasattr getattr setattr...这是通过调用 并捕获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
python3完全使用了新式类,废弃了旧式类,getattribute作为新式类的一个特性有非常奇妙的作用。...查看一些博客和文章后,发现想要彻底理解getattr和getattribute的区别,实际上需要理解python中属性的查找顺序、描述器(descriptor)、__get__、__set__、__dict...假设 t = T(),t.at的查找顺序如下: 1、如果是python自动产生的属性,返回,否则进行第2步 2、如果‘at’出现在了T或者其父类和祖先类的__dict__中(即‘at’是一个类属性,并非只属于...下面继续使用上方代码验证__getattr__、非描述器的执行顺序。...到这里我们也就了解到了python中属性的查找顺序、getattribute和getattr的执行顺序。
原创博客,如需转载,请联系作者 在使用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
描述getattr() 函数用于返回一个对象属性值。语法getattr 语法:getattr(object, name[, default])参数object -- 对象。...name -- 字符串,对象属性。default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。返回值返回对象属性值。...实例以下实例展示了 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
from itertools import chain a = [1, 2, 3, 4] b = ['x', 'y', 'z'] for x in chain(a, b): ... print...Better for x in chain(a, b): 第一种方案中, a + b 操作会创建一个全新的序列并要求a和b的类型一致。...并且当可迭代对象类型不一样的时候 chain() 同样可以很好的工作。
参考链接: Python hasattr() http://www.runoob.com/python/python-func-hasattr.html https://www.cnblogs.com.../usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 class Coordinate: 5 x = 10 6 y = -5 7 ...name -- 字符串,属性名。 返回值 如果对象有该属性返回 True,否则返回 False。
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一切皆对象,对象都有很多属性和方法,使用时我们怎么知道对象有哪些属性,以及如何获取对象的属性和设置对象的属性呢?...Python提供了dir,hasattr,getattr,setattr,vars等函数,可以帮助我们操作和使用对象的属性。...从object对象中获取name字符串对应的属性。获取的属性可能来自对象所属的类或父类。...print(getattr(wo, 'name')) # print(getattr(wo, 'friend')) print(getattr(wo, 'friend', 'me')) shop = getattr...如果是对象没有的属性,我们可以设置默认值,则getattr会返回这个默认值。 getattr获取对象的方法时,会返回一个方法对象,我们可以像执行函数一样执行这个方法。 ?
只需要定义好__str__()方法,返回一个好看的字符串就可以了: >> class Student(object): ......__ getattr__ Python的一个机制,写一个getattr()方法,动态返回一个属性。...调用Chain类的构造函数,返回一个Chain类的对象,假设命名为ch,path=''; 第二次,对ch变量调用他的a属性,因为不存在,调用__getattr__函数,返回一个Chain对象,这个时候里面的...初始默认为"" ,Chain().a 时,类中并没有 a 属性,Python解析器调用 getattr函数 --> __getattr__(self,path='a'), 并返回一个Chain实例,然后把...,所以返回的是Chain(), 这个就会调用call函数了,然后把“Michael”作为path传入,然后call函数就返回了/a/b/user/Michael,剩下的类同。
. >>> print Student('Michael') 只需要定义好__str__()方法,返回一个好看的字符串就可以了...总之,通过上面的方法,我们自己定义的类表现得和Python自带的list、tuple、dict没什么区别,这完全归功于动态语言的“鸭子类型”,不需要强制继承某个接口。..._(self, attr): if attr=='score': return 99 当调用不存在的属性时,比如score,Python解释器会试图调用__getattr..._path = path def __getattr__(self, path): return Chain('%s/%s' % (self....如果我们能写出这样的链式调用: Chain().users('michael').repos Try 就可以非常方便地调用API了。
前言 当实例对象调用一个不存在的属性时,系统通常会报错,那有啥办法避免这种现象么,或者说自定义报错信息,答案是肯定的,我们可以通过定义__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
只需要定义好__str__()方法, 返回一个好看的字符串就可以了。...,__repr__返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。...(self,attr): if attr == 'score': return 99 当调用属性不存在时,比如score,Python解释器会试图调用__getattr...利用完全动态__getattr__,我们可以写出一个链式调用: class Chain(object): def __init__(self,path =''): self.path...=path def __getattr__(self,path): return Chain('%s %s' % (self.path,path)) def __str
,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。...要避免这个错误,除了可以加上一个score属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性。..., attr): if attr=='score': return 99 当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__...利用完全动态的__getattr__,我们可以写出一个链式调用: class Chain(object): def __init__(self, path=''): self...._path = path def __getattr__(self, path): return Chain('%s/%s' % (self.
python魔法函数__dict__和__getattr__的妙用。__dict____dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值。...__getattr__使用.获取属性的时候,如果该属性存在就输出其值,如果不存在则会去找_getatrr_,我们可以通过重写该方法可以实现动态属性的操作。...def __init__(self, root_url): self.url = root_url self.session=HTMLSession() def __getattr...下面展示一个__getattr__经典应用的例子,可以通过获取属性值的方式获取字典的键值。...__init__(*args, **kwargs) def __getattr__(self, name): value = self[name] if isinstance
__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常。 object....如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发AttributeError异常) object....(descriptor的实例自己访问自己是不会触发__get__,而会触发__call__,只有descriptor作为其它类的属性才有意义。)...(所以下文的d是作为C2的一个属性被调用) class C(object): a = 'abc'def __getattribute__(self, name): print(...__getattribute__(self, name) def __getattr__(self, name): print("__getattr__() is called
只需要定义好__str__()方法,返回一个好看的字符串就可以了: >>> class Student(object): ......,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。...要避免这个错误,除了可以加上一个score属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性。...利用完全动态的__getattr__,我们可以写出一个链式调用: class Chain(object): def __init__(self, path=''): self...._path = path def __getattr__(self, path): return Chain('%s/%s' % (self.
. >>> 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' >>> 作者
,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。...要避免这个错误,除了可以加上一个score属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性。...__(self, attr): if attr=='score': return 99 当调用不存在的属性时,比如score,Python解释器会试图调用__getattr...利用完全动态的__getattr__,我们可以写出一个链式调用: class Chain(object): def __init__(self, path=''): self...._path = path def __getattr__(self, path): return Chain('%s/%s' % (self.