x = 60
y = 300
platform_name = "Platform"
platform_parts = 1
%s.Platform(x,y, "edge_left") % platform_name+"_"+str(platform_parts)
这应该是从我的Platform类创建一个名为Platform_1的平台,但是却给出了语法错误,指向%s
部分。有人知道我在这里做错什么以及应该怎么做吗?
答案 0 :(得分:0)
您可以使用内置type
来使类对象具有变量名称。
>>> class Foo: pass # Normal class declaration.
>>> Foo # See how it's printed.
<class '__main__.Foo'>
>>> Foo_1 = Foo() # Instantiation and assignment.
>>> Foo_1
<__main__.Foo object at 0x0000029B7FF5A240>
>>> name = 'Bar' # Name in a string variable.
>>> globals()[name] = type(name, (), {}) # Dynamic class name from variable.
>>> Bar
<class '__main__.Bar'>
>>> Bar()
<__main__.Bar object at 0x0000029B7FF5AA90>
您还可以使用exec
以字符串形式运行代码。通常不赞成使用exec
,因为几乎总是有一种更好的方法,但是初学者常常不知道如何使用。但是这种技术甚至在标准库中使用,例如在namedtuple
中。
>>> name = 'Baz'
>>> codestring = f'''
class {name}: pass
'''
>>> codestring
'\nclass Baz: pass\n'
>>> print(codestring)
class Baz: pass
>>> exec(codestring, globals())
>>> Baz
<class '__main__.Baz'>
答案 1 :(得分:0)
如果您只是想为动态名称分配实例,
globals()[platform_name+"_"+str(platform_parts)] = Platform(x,y, "edge_left")
将使用Platform_1
实例创建名为Platform
的全局变量。