getattr
getattr(a,'b')的作用就和a.b是一样的。那么这个内建函数有什么作用呢,最方便的无疑是使用它来实现工厂方法(Factory Method)模式。
参数说明:
object:对象的实例
name:字符串,对象的成员函数的名字或者成员变量
default:当对象中没有该属性时,返回的默认值异常:当没有该属性并且没有默认的返回值时,抛出"AttrbuteError"。
异常安全的写法:
主要有两种异常
AttributeError: 对象中没有该属性
try:
func = getattr(obj,"method")
except AttributeError:
...... deal
else:
result = func(args)
// 或指定默认返回值
func = getattr(obj,"method", None)
if func:
func(args)
TypeError: 不可调用
func = getattr(obj,"method", None)]
if callable(func):
func(args)
setattr:
setattr()表示你可以通过该方法,给对象添加或者修改指定的属性。setattr()方法接受3个参数:setattr(对象,属性,属性的值)
delattr:
delattr()表示你可以通过该方法,删除指定的对象属性。
delattr方法接受2个参数:delattr(对象,属性)
下面是代码的应用
#encoding=utf-8
class student(object):
def __init__(self,name,age):
self.name = name
self.age = ages
info = student('xiaoming',32)
print sinfo.name
setattr(sinfo,'python','haha')
##和:sinfo.python = 'haha' 效果一样
print sinfo.__dict__
delattr(sinfo,'python')
##和del sinfo.python效果一样
print sinfo.__dict__