有没有理由python的BaseHTTPServer.HTTPServer
是旧式的?
>>> import BaseHTTPServer
>>> type(BaseHTTPServer.HTTPServer)
classobj
我问,因为我想在继承自super
但不能继承的类中使用HTTPServer
。有一种解决方法:
class MyHTTPServer(HTTPServer,object):
...
这种解决方法是否有任何隐藏的'陷阱'?
答案 0 :(得分:4)
... it was easier to leave them as they were than risk
introducing incompatibilities.
问题在Python3中已得到纠正,其中所有类都是新式类。
如今,我们只看到了新式课程的优点,我们习惯于以与新式相容的方式进行编程。然而,当经典类成为常态时,可能会有这样的代码:
def __str__():
return "I'm Classic"
class Classic: pass
c = Classic()
c.__str__ = __str__
print(c)
打印
I'm Classic
但是,如果将经典类更改为新样式,那么在实例上定义特殊方法的方法将被破坏:
class New(object): pass
n = New()
n.__str__ = __str__
print(n)
打印
<__main__.New object at 0xb746ad4c>
对于新式类,必须在对象的类(或MRO)中定义__str__
等特殊方法才能影响对象。对于旧式的课程,情况并非如此。
由于Python2旨在向后兼容,因此像这样的差异会阻止Python2将标准库中的经典类更改为新样式。