python操作对象属性

905 查看

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__