Python对象属性操作的方法包括hasattr、getattr、setattr和delattr;
实例化的对象中属性是只读的,无法使用delattr执行删除操作。
hasattr
用法:
hasattr(obj, name, /)
返回obj中是否存在name属性,存在返回True,反之返回否;
这是通过调用getattr(obj,name)并捕获AttributeError来完成的
实例演示:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class X(object):
y = 10
def func1(self, num):
print("input num=%s" % num)
x = X()
print(hasattr(x, 'y')) #存在返回True
print(hasattr(X, 'func2')) #不存在返回False
getattr
用法:
getattr(object, name[, default]) -> value
获取对象已命名的属性;
getattr(x, ‘y’)相当于x.y;
default值可选,当对象的属性不存在时返回默认值。
实例演示:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class X(object):
y = 10
def func1(self, num):
print("input num=%s" % num)
x = X()
print(x.y)
print(getattr(x,'y'))
print(getattr(x,'z', 1))
getattr(x, 'func1')(69) #相当于x.func1(69)
getattr(x,'z') #属性z不存在且没有定义缺省值,触发AttributeError
setattr
setattr(obj, name, value, /)
用法:
设置obj中的name为value,name若不存在则新增name属性。
setattr(x, ‘y’, v) 相当于x.y = v
实例演示:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class X(object):
y = 10
x = X()
setattr(X, 'y', 20)
print(X.y) #20
print(x.y) #20
setattr(x, 'y', 25)
print(X.y) #20
print(x.y) #25
delattr
用法:
delattr(obj, name, /)
删除obj中的name属性
delattr(x, ‘y’) 相当于del x.y
实例演示:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class X(object):
y = 10
z = 15
x = X()
delattr(X, 'y')
print(hasattr(x, 'y')) # False
delattr(x, 'z') #触发AttributeError: 'X' object attribute 'z' is read-only