繁体   English   中英

将变量设置为类的名称并从该类调用函数

[英]Setting a variable to the name of a class and calling a function from that class

有没有办法将变量设置为字符串,然后使用该变量从具有该变量同名的类调用函数?

例如:

class Foo(object):
    def printer(self):
        print "Hello."

Bar = Foo()
var = 'Bar'

当我然后尝试调用var.printer()时,我收到错误:

AttributeError: 'str' object has no attribute 'printer'

这是有道理的,但有没有办法以这种方式调用类函数,通过使用与类同名的变量?

我想这样做的原因是我可以拥有一组单独的变量,能够调整这些变量,然后将它们组合成一个字符串,并从一个与字符串同名的类中调用一个函数。 例如:

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的定义位置)返回的映射中的字符串:

locals()['Bar'].printer()

作为一些未经请求的建议,通常如果你这样做,最好首先明确地将'Bar'放在字典中,而不是需要依赖locals / globals / vars

而不是将对象放入单个变量,将它们放入一个字典:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM