簡體   English   中英

使用Python在運行時動態地向類添加屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM