Python 将变量设置为类的名称并从该类调用函数
有没有办法将变量设置为字符串,然后使用该变量从具有该变量相同名称的类调用函数 例如:Python 将变量设置为类的名称并从该类调用函数,python,Python,有没有办法将变量设置为字符串,然后使用该变量从具有该变量相同名称的类调用函数 例如: class Foo(object): def printer(self): print "Hello." Bar = Foo() var = 'Bar' from random import randint x = 0 y = 0 class c00(object): def printname(self): print "c00" class
class Foo(object):
def printer(self):
print "Hello."
Bar = Foo()
var = 'Bar'
from random import randint
x = 0
y = 0
class c00(object):
def printname(self):
print "c00"
class c01(object):
def printname(self):
print "c01"
choose_class = randint(0, 2)
if choose_class == 0:
xstr = str(x)
ystr = str(y)
string = 'c' + xstr + ystr
string.printname()
else:
y += 1
xstr = str(x)
ystr = str(y)
string = 'c' + xstr + ystr
string.printname()
然后,当我尝试调用var.printer()时,出现错误:
AttributeError: 'str' object has no attribute 'printer'
这是有道理的,但是有没有办法通过使用与类同名的变量以这种方式调用类函数呢
我想这样做的原因是,我可以有一组单独的变量,能够调整这些变量,然后将它们组合成字符串,并从与字符串同名的类调用函数。例如:
class Foo(object):
def printer(self):
print "Hello."
Bar = Foo()
var = 'Bar'
from random import randint
x = 0
y = 0
class c00(object):
def printname(self):
print "c00"
class c01(object):
def printname(self):
print "c01"
choose_class = randint(0, 2)
if choose_class == 0:
xstr = str(x)
ystr = str(y)
string = 'c' + xstr + ystr
string.printname()
else:
y += 1
xstr = str(x)
ystr = str(y)
string = 'c' + xstr + ystr
string.printname()
有什么办法可以做到这一点吗?您可以从“Bar”对象的名称中获取一个对它的引用,作为一个字符串,该字符串来自
locals
返回的映射(或globals
,具体取决于Bar
的定义位置):
作为一点不请自来的建议,通常如果你这样做的话,最好首先明确地将
'Bar'
放在字典中,而不需要依赖局部变量
/全局变量
/变量而不是将对象放在单个变量中,而是将它们放在dict中:
chooser = {'c00': c00(), 'c01': c01()}
chooser['c' + xstr + ystr].printname()
如果我很了解您的问题,您无需这样做,只需使用列表和random.choice
:
class c00(object):
def printname(self):
print "c00"
class c01(object):
def printname(self):
print "c01"
classes = [c01, c00]
my_var = random.choice(classes)()
my_var.printname()
为什么最好使用字典而不是本地/全局/变量?