getattr,getATtribute ie8和ie11
python中的getattr(object,name)和object.name有什么区别?
正常情况下没有什么区别
但是如果name不是object的属性,那么区别就显示出来了.
如果直接访问一个不存在的属性,那么将会抛出AttributeError异常
而是用getattr则可以返回一个默认值
例如
getattr(obj,'sss','emtry')
如果obj存在sss属性,则返回相关的值,否则默认返回一个'emtry'.
linux getattr函数什么意思
getattr(obj,"property_name or method_name")
可以动态的获取一个对象的属性和方法.
比如,一个命令处理类有很多方法 do_create do_destroy do_list do_start do_stop,
那么就可以这样写
def exec(self,command,args):
if hasattr(self,"do_"+command):
func=getattr(self,"do_"+command)
return func(args)
这样你只要添加这个类的方法,就能直接扩充该类所支持的命令了(python内置的一个命令行解释器模块就是用的这个方式。)
python __getattr__和__setattr__应该怎么理解
__getattr__为内置方法,当使用点号获取实例属性时,如果属性不存在就自动调用__getattr__方法
__setattr__当设置类实例属性时自动调用,如j.name=5 就会调用__setattr__方法 self.[name]=5
因为这个类是从dict继承来的,是dict的超类
所以 self[attr]=value 相当于调用dict的下标方法
与 a={} ; a[attr]=value意思一样
python getattribute、get、getattr、getitem等用法
__getattribute__
__getattribute__是属性访问拦截器,就是当类的属性被访问时,会自动调用类的__getattribute__方法。
参考代码:
代码执行过程中,当调用实例对象attribute的name属性时,不会直接打印,而是把name的值作为实参传进__getattribute__方法中,经过一系列操作后,再把name的值返回。
python中只要定义了继承object的类,就默认存在属性拦截器,只不过是拦截后没有进行任何操作,而是直接返回。
我们可以自己改写__getattribute__方法来实现相关功能,比如查看权限、打印log日志等。
getattr、hasattr、setattr
对象属性的判断。
参考代码:
__getattr__、__setattr__、__delattr__
类支持 . 操作来访问属性;定制功能:耗时、日志等等。
参考代码:
__getitem__、__setitem__、__delitem__
类支持通过[]来访问属性
参考代码:
__get__、__set__、__delete__
参考代码:
参考文档:
VB中,使用getattr函数的问题
返回一个 Integer,此为一个文件、目录、或文件夹的属性。
语法
GetAttr(pathname)
必要的 pathname 参数是用来指定一个文件名的字符串表达式。pathname 可以包含目录或文件夹、以及驱动器。
返回值
由 GetAttr 返回的值,是下面这些属性值的总和:
常数值描述
vbNormal0常规
vbReadOnly1只读
vbHidden2隐藏
vbSystem4系统文件
vbDirectory16目录或文件夹
vbArchive32上次备份以后,文件已经改变
vbalias64指定的文件名是别名。
注意 这些常数是由 VBA 指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的值。
说明
若要判断是否设置了某个属性,在 GetAttr 函数与想要得知的属性值之间使用 And 运算符与逐位比较。如果所得的结果不为零,则表示设置了这个属性值。例如,在下面的 And 表达式中,如果档案 (Archive) 属性没有设置,则返回值为零:
Result = GetAttr(FName) And vbArchive
如果文件的档案属性已设置,则返回非零的数值。