我想知道是否有人知道在使用@property
和常規屬性時是否有任何細微差別?python中的屬性裝飾器初始化
在python中使用@property
裝飾器時,對於屬性的初始化可能會出現任何問題嗎? 我的理解是,這個裝飾器允許一個屬性在每次被調用的時候被函數計算出來,因爲它是一個依賴於其他可變屬性的屬性。 我已經寫了一些這些@property
修飾器,但他們不工作的原因。 我收到這種形式的錯誤:
for key in temp_spectra.overall_properties_dictionary:
AttributeError: 'Spectra' object has no attribute 'overall_properties_dictionary'
據我瞭解,創建這些@property
S上的正確的方法是,像這樣:
from PyQt4 import QtCore, QtGui
class someObject(QtCore.QObject):
def __init__(self, x, y):
self.x = x
self.y = y
@property
def some_other_property(self):
# some complicated function which will recalculate everytime it is called
# because the other properties may be mutable
p = self.x + self.y
return p
class otherObject(QtGui.QTabWidget):
def __init__(self, someObject):
print someObject.some_other_property
otherObject(someObject(1,5))
然而,這作品!所以我不確定我的代碼的哪一部分可能會導致這種情況。
值得一提的是,我正在將我的代碼轉換爲使用multiprocessing
。這會導致問題嗎?我只是不明白什麼可能會出現錯誤的初始化導致這種類型的錯誤。
編輯:我改變了代碼的建議,以符合新風格的類*
'@ property'性能不規律。 – glglgl 2013-03-27 16:10:16