我有一個奇怪的python問題。在執行我的gtk python應用程序的過程中,我的一些類對象神祕地失去了屬性,導致我的程序的一些功能中斷。Python類丟失屬性
很難說出爲什麼會出現這種情況 - 我從不故意刪除屬性,而且這些類繼承自我自己寫的類(也沒有其他類)。
我可以反覆做某些動作觸發的問題(例如產生許多調用的add_card
方法 - 通過單擊瘋狂或打開一個文件,導致add_card
被稱爲二十歲左右的時間)
我真的很茫然,我希望我有更多我認爲有用的信息給你。
什麼會導致python對象失去屬性?
EDIT,Re。問題:
下面是相關的兩個屬性我如回溯「丟失」:
Traceback (most recent call last):
File "lib/genericlist.py", line 90, in cursor_changed
if self.viewer:
AttributeError: 'DeckerRunnerList' object has no attribute 'viewer'
Traceback (most recent call last):
File "lib/genericlist.py", line 100, in row_activated
selection = self.TABLE_NAME+"&&"+text
AttributeError: 'DeckerRunnerList' object has no attribute 'TABLE_NAME'
,這裏是他們設置:
class DeckerGenericList(object):
def __init__(self, database, viewer=None, deck=None):
super(DeckerGenericList, self).__init__()
self.database = database
self.viewer = viewer
self.deck = deck
#TABLE_NAME is set in the subclass constructor
這種特殊的子類doesen't調用它的超類__init__
所以屬性集重複在子類中:
class DeckerRunnerList(DeckerGenericList):
def __init__(self, database, viewer=None, deck=None):
self.database = database
self.viewer = viewer
self.deck = deck
self.TABLE_NAME = "runners"
個所有DeckerGenericList的其他子類有同樣的問題,他們都被定義是這樣的:
class DeckerGearList(DeckerGenericList):
def __init__(self, database, viewer=None, deck=None):
self.TABLE_NAME = "gear"
#... some other class attributes
super(DeckerGearList, self).__init__(database, viewer=viewer, deck=deck)
你使用線程嗎?你能顯示一些代碼嗎? – Keith
如何設置這些屬性?你怎麼知道他們被刪除? – Kos
首先,如果你還沒有,檢查對象的類型,以確保它實際上是你的類的一個實例 - 我發現跟蹤Python等弱動態類型語言中的類型是一個常見的錯誤來源。 – ApproachingDarknessFish