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()

为什么最好使用字典而不是
本地/全局/变量