私は独特のPythonの問題を抱えています。gtk python アプリケーションの実行中に、クラス オブジェクトの一部が不思議なことに属性を失い、プログラムの機能の一部が壊れます。
なぜこれが起こるのかを理解するのは難しいです.私は意図的に属性を削除したことはありません.問題のクラスは私が書いたクラスから継承しています.
特定のアクションを繰り返し実行することで問題を引き起こすことができます(たとえば、add_card
メソッドへの多くの呼び出しを生成します-狂ったようにクリックするか、ファイルを開くことadd_card
で、20回ほど呼び出されます)
私は本当に途方に暮れており、あなたに提供するのに役立つと思われる情報がもっとあればいいのにと思います.
Python オブジェクトが属性を失う原因は何ですか?
編集、Re。質問:
以下は、「失う」2 つの属性に関連するトレースバックの例です。
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
この特定のサブクラスはスーパークラスを呼び出さない__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)