66

クラスがあります

class Foo():
    def some_method():
        pass

そして、同じモジュール内の別のクラス:

class Bar():
    def some_other_method():
        class_name = "Foo"
        # Can I access the class Foo above using the string "Foo"?

Foo文字列「Foo」を使用してクラスにアクセスできるようにしたい。

別のモジュールにいる場合は、次を使用してこれを行うことができます。

from project import foo_module
foo_class = getattr(foo_module, "Foo")

同じモジュールで同じようなことはできますか?

IRC の担当者は文字列クラス名をクラスにマップするマッピング dict を使用することを提案しましたが、もっと簡単な方法がある場合はそうしたくありません。

4

3 に答える 3

96
import sys
getattr(sys.modules[__name__], "Foo")

# or 

globals()['Foo']
于 2013-07-31T01:17:23.853 に答える
9

sysモジュールの助けを借りてそれを行うことができます:

import sys

def str2Class(str):
    return getattr(sys.modules[__name__], str)
于 2013-07-31T01:17:24.307 に答える
6
globals()[class_name]

これが厳密に必要でない場合は、コードをリファクタリングして使用しないようにすることをお勧めします。

于 2013-07-31T01:17:18.100 に答える