python - 制作名称中带有变量的类对象,不起作用
问题描述
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
部分。有谁知道我在这里做错了什么以及应该怎么做?
解决方案
您可以使用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'>
推荐阅读
- centos - Airflow db init 错误 - 无法为 GET /api/v1/connections 添加操作
- python - Python - 尝试使用异步数据库获取所有内容
- c - pow 函数未返回预期值
- c# - SQL LINQ 返回问题 | 如我所述,如何返回列表类型,我想将 queryresultpage 作为订单列表返回
- excel - 向 Power Query Excel 中的现有列添加值
- python - 是否可以在 Pyomo 的目标函数中编写非线性分段函数?
- nginx - Nginx - 位置重定向
- clickhouse - jemalloc.resident 在 CH-20.6.3.28 中增加到 70GB,是内存泄漏吗?我们有什么解决办法吗?
- c++ - 计算具有推力的设备阵列的归约和
- c++ - 模板扣减失败