python动态函数hasattr,getattr,setattr,delattr

hasattr(object,name)

hasattr用来判断对象中是否有name属性或者name方法,如果有,染回true,否则返回false

class attr():
    def fun(x):
        return x%2==1

if __name__ == '__main__':
    attr=attr()
  print  hasattr(attr,'fun')

 

setattr(object,name,value)

给对象的属性赋值,如属性不存在,先创建

class attr():
    def fun(x):
        return x%2==1
if __name__ == '__main__':
    attr=attr()
  print  hasattr(attr,'fun')
  setattr(attr,'x',4)
  print attr.x

也可以使用该方式,动态创建方法

def add(x,y):
    return x+y
class attr():
    def fun(x):
        return x%2==1
if __name__ == '__main__':
    attr=attr()
    print  hasattr(attr,'fun')
    setattr(attr,'add',add) 注意,这里的add函数不能添加(),几不能谢伟add()
    print hasattr(attr,'add')返回true
    print attr.add(4,5) 返回9

 

getattr(object,name,default)

获取对象的属性或者方法,如果存在返回,如果不存在,返回默认值,默认值是可选的

如果返回的对象是方法,返回方法的内存地址,如果要运行,可以在后面添加()

def add(x,y):
    return x+y
class attr():
    def fun(x):
        return x%2==1
if __name__ == '__main__':
    attr=attr()
   
print getattr(attr,'fun')返回fun的内存地址
print getattr(attr,'name','hello')返回hello,但不创建name属性
 

defattr(object,name)

用来删除对象的属性

def add(x,y):
    return x+y
class attr():
    def fun(x):
        return x%2==1
if __name__ == '__main__':
    attr=attr()
    print  hasattr(attr,'fun')
    setattr(attr,'x',4)
    print hasattr(attr,'x')
    #print attr.add(4,5)
   
print getattr(attr,'fun')
    delattr(attr,'x') 删除了x属性
    print hasattr(attr, 'x')返回为false

删除在对象中已经定义好的属性,会报错,可以删除动态添加的属性

posted @ 2017-07-05 17:37  hellowcf  阅读(369)  评论(0编辑  收藏  举报