当我扩展了一些工具生成的类,直到我尝试使用super()时,我才意识到它们是旧式类。超()不能与旧样式类工作,所以我得到这个错误:扩展新旧风格类可以吗?
TypeError: super() argument 1 must be type, not classobj
例如,试试这个片断:
>>> class A:
... def greet(self):
... print "A says hi"
...
>>> class B(A):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: super() argument 1 must be type, not classobj
我只是好奇,如果我延长B将发生什么从对象,以及使它成为一个新的风格类,它似乎使超()的工作。
>>> class B(A, object):
... def greet(self):
... print "B says hi"
...
>>> super(B, B()).greet()
A says hi
这是一个合适的解决方法,否则我以后会有一些不必要的后果?
为什么不能将'class A'改成'class A(object)'?什么阻止你修复根本原因并使所有的新风格都变成现实?为什么你认为解决方案比解决方案更好? – 2009-10-29 10:19:42
原因是生成了类A(正如我在开始时提到的那样,我正在扩展工具生成的类)。如果我进行这种更改,下次重新生成类时,它们会被覆盖。 – haridsv 2009-10-29 18:41:54