我有一段代码使用值列表生成对象的实例。例如:
给定一个简单的类实现__slots__
class A(object):
__slots__ = ('a', 'b')
和一个值列表
>>> l = [1, 2]
我们通过创建对象的新实例
>>> o = A.__new__(A)
>>> o
<__main__.A object at 0x0617AE70>
然后我们使用列表中的元素填充对象的属性
>>> for idx, element in enumerate(l):
... setattr(o, o.__slots__[idx], element)
>>> o.a
1
>>> o.b
2
我在许多值列表的循环中执行此操作,并且在分析我的程序之后,这是它花费大量时间的地方。我想知道是否有更好的方法可以使用普通 python(没有 pypy 或 cython)更快地做到这一点。
笔记:
- 我的程序实际上是从我的对象
cls.__new__(cls)
继承的方法调用的。__slots__
由于我不知道调用该方法的类,因此这是我发现创建该特定类类型的新实例的唯一方法。 - 我正在从包含值的文件中创建这些对象,但这是程序的要求。