如何在python中动态创建对象?

2024-09-29 23:21:14 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在Python中动态创建对象?我经常想将信息传递给Django模板,其格式如下:

{'test': [a1, a2, b2], 'test2': 'something else', 'test3': 1}

这使得模板看起来不整洁。所以我认为最好创建一个对象,它是这样的:

class testclass():
    self.test = [a1,a2,b2]
    self.test2 = 'someting else'
    self.test3 = 1
testobj = testclass()

所以我可以:

{{ testobj.test }}
{{ testobj.test2 }}
{{ testobj.test3 }}

而不是去查字典。

因为我只需要那个对象一次,所以不先编写类就可以创建它吗?有短的手码吗?这样做可以吗?还是糟糕的Python?


Tags: 对象testself模板信息a2a1动态
3条回答

您可以使用内置的type function

testobj = type('testclass', (object,), 
                 {'test':[a1,a2,b2], 'test2':'something else', 'test3':1})()

但在这种特定情况下(Django模板的数据对象),应该使用@Xion的解决方案。

在Django模板中,点符号(testobj.test)可以解析为Python的[]运算符。这意味着你只需要一个普通的口述:

testobj = {'test':[a1,a2,b2], 'test2':'something else', 'test3':1}

将其作为testobj变量传递到模板,您可以在模板中自由使用{{ testobj.test }}和类似的表达式。它们将被翻译成testobj['test']。这里不需要专门的课程。

Python 3.3+types.SimpleNamespace中还有另一个解决方案

from types import SimpleNamespace
test_obj = SimpleNamespace(a=1, b=lambda: {'hello': 42})

test_obj.a
test_obj.b()

相关问题 更多 >

    热门问题