2016-10-27 13 views
4

我在Python中嵌入代碼。 我需要訪問一個對象的屬性。直接訪問類屬性比通過getter函數獲取值更快嗎?

正在做objectA.attribute_x快於objectA.get_attribute_x()

從OO的角度來看,使用getter似乎是正確的做法。 但是哪種方法計算更便宜/更快?

+5

在Python中,getters很少是「正確的事情」。 –

+0

我們懶得編寫函數,它只返回objectA.attribute_x' – furas

+0

是的,虛線查找比getter更快。在Python中,getters/setters通常不是正確的做法。這與其他語言不同!在其他語言中,getter和setter是絕對正確的。 – sytech

回答

2

在大多數情況下,object.attribute是一個簡單的辭典鍵查找,同時object.get_attribute_a是一本字典查找+調用函數中的任何開銷。

所以是的,功能版本比較慢,通常不會在您習慣的形式中使用; properties是管理屬性的標準方式(再次,他們在返回之前管理屬性使得它們變慢)。

+0

但是'property'是一個函數調用。 – tdelaney

+0

@tdelaney是的,它仍然比較慢;我的觀點是,這是管理屬性的標準方式,而不是像java那樣的'get_attr_x'方法。 –

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 

直接屬性的查找是明確的贏家。

相關問題