在Python中动态添加属性到类中

1 投票
3 回答
1556 浏览
提问于 2025-04-17 02:04

当我执行以下操作时:

def Welcome(email, temporaryPassword):
    model = object()
    model.TemporaryPassword = temporaryPassword
    model.Email = email

我遇到了一个错误:

AttributeError: 'object' object has no attribute 'TemporaryPassword'

我该如何像这样动态创建一个对象呢?

3 个回答

1

如果你只是把这个对象当作一个数据结构来用(也就是说,不使用任何方法),那么你可以使用来自collectionsnamedtuple

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))

撰写回答