2013-09-29 70 views
0

我正在寫一個簡單的XML序列化程序,並發現了一個奇怪的問題。如果一個被序列化的對象繼承自對象明確地說一切正常 - 我可以序列化和反序列化它。動態創建的python對象沒有__new__屬性

但是,如果我不指定對象明確,它失敗儘管對象是MRO反序列化:

class ScanResults(object): 

工作正常,但

class ScanResults: 

不起作用

MRO :[<class 'aplib.scanresults.ScanResults'>, <class 'aplib.pyxmlser.pyxmlser'>, <type 'object'>] 

Traceback (most recent call last): 
... 
    classinst = classobj.__new__(classobj, None, None) 

AttributeError: class AccessPoint has no attribute '__new__' 

任何想法,非常感謝。

+0

您必須通過Python 2.x.查找新式課程。 [Here's](http://www.python.org/doc/newstyle/)是一個很好的起點。 – Veedrac

回答

3

舊式課程(不是從object派生的課程)沒有__new__()。測試

+0

當然,但我相信老式類_object_不應出現在繼承鏈 – dsamersoff

+1

MRO從哪裏來?舊式類也沒有'__mro__'。 – kindall

+0

類型().mro() – dsamersoff

0

的一種方式,如果一個實例是一箇舊式化酶(這失敗)是使用

type(my_instance) is types.InstanceType 

將評估爲True舊樣式類。

+0

謝謝!這與我所尋找的非常接近。 – dsamersoff

+0

你應該在Python中使用'isinstance(obj,class)';它也適用於這種情況:'isistance(my_instance,types.InstanceType)'。 –

+0

@ErikAllik我承認'isinstance''可以在這種情況下工作,但它不太明顯*它可以用於多重繼承。 'isinstance'的優點是ducktyping,這在這種情況下是不相關的。 – Veedrac

相關問題