我在Python中嵌入代碼。 我需要訪問一個對象的屬性。直接訪問類屬性比通過getter函數獲取值更快嗎?
正在做objectA.attribute_x
快於objectA.get_attribute_x()
?
從OO的角度來看,使用getter似乎是正確的做法。 但是哪種方法計算更便宜/更快?
我在Python中嵌入代碼。 我需要訪問一個對象的屬性。直接訪問類屬性比通過getter函數獲取值更快嗎?
正在做objectA.attribute_x
快於objectA.get_attribute_x()
?
從OO的角度來看,使用getter似乎是正確的做法。 但是哪種方法計算更便宜/更快?
在大多數情況下,object.attribute
是一個簡單的辭典鍵查找,同時object.get_attribute_a
是一本字典查找+調用函數中的任何開銷。
所以是的,功能版本比較慢,通常不會在您習慣的形式中使用; properties
是管理屬性的標準方式(再次,他們在返回之前管理屬性使得它們變慢)。
但是'property'是一個函數調用。 – tdelaney
@tdelaney是的,它仍然比較慢;我的觀點是,這是管理屬性的標準方式,而不是像java那樣的'get_attr_x'方法。 –
讓我們知道!好像有一個與函數調用更多的工作,但讓我們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
直接屬性的查找是明確的贏家。
在Python中,getters很少是「正確的事情」。 –
我們懶得編寫函數,它只返回objectA.attribute_x' – furas
是的,虛線查找比getter更快。在Python中,getters/setters通常不是正確的做法。這與其他語言不同!在其他語言中,getter和setter是絕對正確的。 – sytech