0

我有一个非常烦人的错误,我终于找到了它。

我使用(或更准确地说,已经使用过)一个独立的脚本来创建对象存储,然后我腌制这个数据结构。然后,我可以在每次程序运行时使用反序列化数据初始化我的主程序。

但是,如果我使用类型检查,这将成为一个问题。在我做 pickle.dump() 并得到这个数据结构之后,我设置了它,以便我尝试检查一个对象的类型。不幸的是,我唯一可以检查的就是重新加载我的类,Python 认为这是不同的。

调试:对象我正在检查类型:>> Fixture {name: 'Front Desk', location: '0', desc: 'The front desk has a sign that read...'} <<
DEBUG: A generic GameObject: >> 游戏对象 {name: '', location: 'None', desc: '...' } <<

(您可以看到对象表示看起来非常相似。这是因为一个继承__repr__自另一个,即应该是它的一个实例。)

调试:我正在类型检查的对象类型:{class 'chimai.chimai.objects.fix.Fixture'}
调试:通用游戏对象的类型:{class 'objects.game_object.GameObject'}
调试:对象 I'的 MRO m 类型检查:({class 'chimai.chimai.objects.fix.Fixture'}, {class 'chimai.chimai.objects.game_object.GameObject'}, {type 'object'})
调试:通用游戏对象的 MRO : ({class 'objects.game_object.GameObject'}, {type 'object'})

(GameObject 类的标识符略有不同;这来自我最初运行独立脚本的位置。)

调试:腌制夹具类型的 ID:173671604
调试:在我的主程序中重新加载的夹具类型的 ID:149507748

最终结果是,我根本想不出一种方法来对我的腌制数据进行类型检查。除非有人有任何天才的建议,否则我想我会是鸭子打字。

4

1 回答 1

0

AFAIK,这不可能以任何简单的方式;类型检查与在不同会话中腌制的数据不兼容。在类型检查方面,我不是狂热者,但我喜欢有效的方法。

于 2013-04-22T10:52:05.363 回答