我有一个特殊的python问题。在我的 gtk python 应用程序执行过程中,我的一些类对象神秘地丢失了属性,导致我的程序的一些功能中断。
很难理解为什么会发生这种情况——我从不故意删除属性,并且有问题的类继承自我自己(而不是其他人)编写的类。
我可以通过重复执行某个操作来触发问题(例如生成对该add_card
方法的多次调用 - 通过疯狂点击或打开文件,导致add_card
被调用二十次左右)
我真的很茫然,我希望我有更多我认为有用的信息可以给你。
什么会导致 python 对象丢失属性?
编辑,重新。问题:
以下是与我“丢失”的两个属性相关的示例回溯:
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)