使类对象的名称具有变量,无法正常工作

时间:2018-08-26 00:14:16

标签: python python-3.x

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部分。有人知道我在这里做错什么以及应该怎么做吗?

2 个答案:

答案 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的全局变量。