getattr
getattr(a,'b')的作用就和a.b是一樣的跃巡。那么這個內(nèi)建函數(shù)有什么作用呢,最方便的無疑是使用它來實現(xiàn)工廠方法(Factory Method)模式素邪。
參數(shù)說明:
object:對象的實例
name:字符串,對象的成員函數(shù)的名字或者成員變量
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: 不可調(diào)用
func = getattr(obj,"method", None)]
if callable(func):
func(args)
setattr:
setattr()表示你可以通過該方法磨确,給對象添加或者修改指定的屬性沽甥。setattr()方法接受3個參數(shù):setattr(對象,屬性乏奥,屬性的值)
delattr:
delattr()表示你可以通過該方法,刪除指定的對象屬性邓了。
delattr方法接受2個參數(shù):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__