簡體   English   中英

在 python 運行時創建對象

[英]create objects on runtime in python

如何在 python 的運行時創建對象實例?

說我有 2 節課:

class MyClassA(object):
    def __init__(self, prop):
        self.prop = prop
        self.name = "CLASS A"

    def println(self):
        print self.name


class MyClassB(object):
    def __init__(self, prop):
        self.prop = prop
        self.name = "CLASS B"

    def println(self):
        print self.name

和一個字典

{('a': MyClassA), ('b': MyClassB)}

我如何創建我的兩個類之一的動態實例,具體取決於我選擇“a”或“b”。

這樣的:

somefunc(str):
    if 'a': return new MyClassA
    if 'b': return new MyClassB

在調用時獲得“CLASS B”: somefunc('a').println

但以更優雅和動態的方式(比如我在運行時向字典添加更多類)

您可以創建一個調度程序,它是一個將您的鍵映射到類的字典。

dispatch = {
    "a": MyClassA,
    "b": MyClassB,
}

instance = dispatch[which_one]() # Notice the second pair of parens here!

您可以通過調用 class 創建一個 class 實例。 您的 class dict {('a': MyClassA), ('b': MyClassB)}返回類; 所以你只需要調用 class:

classes['a']()

但我覺得你想要更具體的東西。 這是dict的子類,當使用鍵調用時,它會查找關聯的項目並調用它:

>>> class ClassMap(dict):
...     def __call__(self, key, *args, **kwargs):
...         return self.__getitem__(key)(*args, **kwargs)
... 
>>> c = ClassMap()
>>> c['a'] = A
>>> c['b'] = B
>>> c('a')
<__main__.A object at 0x1004cc7d0>

暫無
暫無

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

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