[英]Add an attribute to a class dynamically at runtime in Python
当我执行以下操作时:
def Welcome(email, temporaryPassword):
model = object()
model.TemporaryPassword = temporaryPassword
model.Email = email
我收到一个错误:
AttributeError: 'object' object has no attribute 'TemporaryPassword'
如何像我一样动态创建对象?
使用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))
您可以先定义一个虚拟类:
class MyObject(object):
pass
obj = MyObject()
obj.TemporaryPassword = temporaryPassword
如果仅将对象用作数据结构(即没有方法),则可以使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.