在Python中动态添加属性到类中
当我执行以下操作时:
def Welcome(email, temporaryPassword):
model = object()
model.TemporaryPassword = temporaryPassword
model.Email = email
我遇到了一个错误:
AttributeError: 'object' object has no attribute 'TemporaryPassword'
我该如何像这样动态创建一个对象呢?
3 个回答
1
如果你只是把这个对象当作一个数据结构来用(也就是说,不使用任何方法),那么你可以使用来自collections
包的namedtuple
。
from collections import namedtuple
def welcome(email, tmp_passwd):
model = namedtuple('MyModel', ['email', 'temporary_password'])(email, tmp_passwd)
...
顺便说一下,如果你的welcome
函数只是创建这个对象并返回它,那其实这个函数就没必要了。你可以直接这样做:
from collections import namedtuple
Welcome = namedtuple('Welcome', ['email', 'temporary_password'])
ex = Welcome('me@example.com', 'foobar')
print ex.email
print ex.temporary_password
1
你可以先定义一个虚拟类:
class MyObject(object):
pass
obj = MyObject()
obj.TemporaryPassword = temporaryPassword
1
使用 lambda 对象 : ( http://codepad.org/ITFhNrGi )
def Welcome(email, temporaryPassword):
model = type('lamdbaobject', (object,), {})()
model.TemporaryPassword = temporaryPassword
model.Email = email
return model
t = Welcome('a@b.com','1234')
print(str(t.TemporaryPassword))