setattr() 和 getattr() 会显着降低速度吗?

Max*_*Max 6 python-3.x

今天在办公室查了一些代码,发现如下代码。它让我震惊。

class XXXX():
    def __init__(self, k, v):
        for i in range(len(k)):
            setattr(self, k[i], v[i])
Run Code Online (Sandbox Code Playgroud)

然后我发现大部分类都是用同样的方式编写的。这意味着所有的类都是同一个类,唯一不同的是它们的名称。

本项目setattr()中用于设置属性,getattr()用于获取属性。在profile log中setattr被调用了2700次,getattr被调用了3800次。耗时分别为0.003sec和0.005sec(整个过程:0.069sec)。

尽管我确实考虑setattrgetattr降低了速度,但我不确定重写所有代码是否会使其更好。

obj.attribute = value 是否比 运行得更快setattr(obj,'attribute',value)

Eth*_*man 3

是的,getattr而且setattr速度要慢得多,至少在 CPU 级别上是这样。

由于__init__每个对象只调用一次,所以除非您创建很多很多对象,否则我不会担心这一点。

如果对象的属性被多次访问,那么重写这些部分可能是值得的。不过,您应该首先进行一些仔细的分析。