[英]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.