![](/img/trans.png)
[英]How can i use a variable name for a class path / use a variable in a reference statement? 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.