gpt4 book ai didi

python - 为什么python的BaseHTTPServer是老式类?

转载 作者:太空宇宙 更新时间:2023-11-03 15:15:18 24 4
gpt4 key购买 nike

python 的 BaseHTTPServer.HTTPServer 是旧式类有什么原因吗?

>>> import BaseHTTPServer
>>> type(BaseHTTPServer.HTTPServer)
classobj

我问是因为我想在继承自 HTTPServer 的类中使用 super 但不能。有一个解决方法:

class MyHTTPServer(HTTPServer,object):
...

此解决方法是否有任何隐藏的“陷阱”?

最佳答案

According to Steve Holden ,

... 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>

对于新式类,__str__ 等特殊方法必须定义在对象的类(或MRO)中才能影响对象。旧式类不是这种情况。

由于 Python2 旨在向后兼容,因此此类差异会阻止 Python2 将标准库中的经典类更改为新样式。

关于python - 为什么python的BaseHTTPServer是老式类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21644938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com