簡體   English   中英

如何在Python中使用變量類名和函數

[英]How can use variable class name and function in Python

我有這門課

class Test(object):
      def __init__(self, *args, **kwargs)
          pass

       def make(self):
          pass

現在我有類名和函數名作為變量

class_name = "Test"
func_name = "make"

我想打電話給Test(**kwargs).make()

我試過這個

    cls_name  = "Test"
    callback  = getattr(cls_name, "make")
    obj = callback()

假設您的類處於全局級別,您可以通過globals()訪問它。 (其他可能的選項是locals()vars() 。)例如:

>>> class Test(object):
...     def __init__(self, *args, **kwargs):
...         print("in test init")
...     def make(self):
...         print("in test make")
... 
>>> cls_name = "Test"
>>> method_name = "make"
>>> callback = getattr(globals()[cls_name](), method_name)
in test init
>>> callback()
in test make

如果Test類位於不同的模塊中,則可以使用getattr(module_containing_test, cls_name)而不是globals()查找。

下面的代碼似乎工作,我不知道它是否安全,因為大多數開發人員討厭eval

class Test(object):
      def __init__(self, *args, **kwargs):
          print "I'm init"
      def make(self):
          print "I'm make"

class_name = "Test"
func_name = "make"
a = eval(class_name+"()")
eval('a'+"."+func_name+"()")

這里這里給出的一些答案匯編

# You have to prepend module name to class name

class_name = "moduletest.Test"
func_name = "make"

def get_class( kls ):
    parts = kls.split('.')
    module = ".".join(parts[:-1])
    m = __import__( module )
    for comp in parts[1:]:
        m = getattr(m, comp)
    return m

# You're creating object here, so have to pass all needed argument then
test = get_class(class_name)() 
callback = getattr(test, func_name)
obj = callback()

globals()中查找類,然后通過getattr調用方法。

clazz = globals()["Test"]
obj = clazz()
getattr(obj, "make")()

暫無
暫無

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

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