直接访问类属性比通过getter函数获取值更快吗?

时间:2016-10-27 18:39:13

标签: python python-3.x

我在python中嵌入了代码。 我需要访问对象的属性。

objectA.attribute_xobjectA.get_attribute_x()更快?

从OO的角度来看,使用getter似乎是正确的做法。 但哪种方式在计算上更便宜/更快?

2 个答案:

答案 0 :(得分:2)

在大多数情况下,object.attribute是一个简单的词典键查找,而object.get_attribute_a是字典查找 + 调用该函数的任何开销。

所以是的,功能版本较慢,通常不会以您习惯的形式使用; properties是管理属性的标准方法(同样,它们在返回之前管理属性的事实使它们变慢)。

答案 1 :(得分:1)

让我们找出来!函数调用似乎有更多的工作,但让我们让timeit有一个裂缝:

from timeit import timeit

class Foo():

    def __init__(self):
        self.bar = "bar"
        self.baz = "baz"

    def get_baz(self):
        return self.baz

print(timeit('foo.bar', setup='import __main__;foo=__main__.Foo()', number=10000000))
print(timeit('foo.get_baz()', setup='import __main__;foo=__main__.Foo()', number=10000000))

我的计算机上有一次运行:

1.1257502629887313
4.334604475006927

直接属性查找是明显的赢家。