簡體   English   中英

在Python中創建動態命名的類實例

[英]Create dynamically named classes instances in Python

我需要根據變量的內容創建一個特定類的新實例。

例如,創建一個名為“ Foo”的類的實例,無論“ s”變量的內容是什么。 這就是我嘗試過的

class Foo:
    pass
s = 'bar'
eval(s) = Foo

上面的代碼返回“無法分配給函數調用”錯誤。

在這種情況下,我需要它在Foo類中創建一個名為“ bar”的實例,但我還需要能夠將“ s”變量更改為任何字符串,並使它仍然可以工作。

如果我還有另一種方法來創建類實例,然后再使用也可以使用的“ s”變量來訪問它們。

通過創建預定義的字典可以回答很多類似的問題,但是在我的情況下,這些字典必須是幾百個項目,並且需要手寫,因此不切實際,而且不是很Python。 我需要完全動態地創建和訪問該實例,希望按名稱命名,但是如果還有另一種方式,我也可以這樣做。

這應該做。

def make_class(name):
    class_text = """
global {} # Makes the class object global.
class {}: # You put the class here.
    pass
""".format(name, name) # Formats the text. There are a couple different ways to do this.
    exec(class_text)

例:

>>> make_class("Foo")
>>> make_class("Bar")
>>> Foo()
<__main__.Foo object at 0x7fedebcda748>
>>> Bar()
<__main__.Bar object at 0x7fedebcda8d0>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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