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__