为什么可以';我不能在python中重写这个方法吗?

为什么可以';我不能在python中重写这个方法吗?,python,python-2.7,inheritance,Python,Python 2.7,Inheritance,我试图重写一个python类(第一次这样做),但我似乎无法重写这个方法。当我运行这个时,我的recv方法不会运行。它运行超类的方法。我做错了什么?(顺便说一下,这是python 2.7。) socket类型(正式的socket.SocketType,尽管socket.socket恰好是同一个对象)奇怪地选择实现recv和一些其他方法作为实例属性,而不是作为类dict.insocket.SocketType.\uu init\uuuu中的普通方法,它设置了一个self.recv实例属性,该属性覆盖

我试图重写一个python类(第一次这样做),但我似乎无法重写这个方法。当我运行这个时,我的recv方法不会运行。它运行超类的方法。我做错了什么?(顺便说一下,这是python 2.7。)


socket类型(正式的
socket.SocketType
,尽管
socket.socket
恰好是同一个对象)奇怪地选择实现
recv
和一些其他方法作为实例属性,而不是作为类dict.in
socket.SocketType.\uu init\uuuu
中的普通方法,它设置了一个
self.recv
实例属性,该属性覆盖了您试图定义的
recv
方法。

请澄清,当您说它运行超类的方法时,您的意思是它不打印“test”?是的,这是正确的。我甚至注释掉了返回行,但它仍然读取一个字符,因此它肯定没有运行我的recv函数。此外,我注意到socket.recv定义与我的不同(允许使用标志),因此我将函数定义更改为recv(self,bufsize,flags=None),但它仍然不起作用。
super(self.\uu class\uuuuu,self)
-永远不要这样做。如果是那么简单的话,Python 2上就会存在0参数
super
<代码>self.\uuuu类\uuuu对于子类实例来说是错误的类。它应该是
super(PersistentSocket,self)。recv(bufsize,flags)
吗?谢谢。你怎么知道这样的事?我找不到记录在案的。这是图书馆的源代码吗?@Dave:我读了源代码,你可以找到。由于使用了
\uuuuu插槽
,您还将看到一些其他奇怪的交互。
import socket

class PersistentSocket(socket.socket):
    def recv(self, count):
        print("test")
        return super(self.__class__, self).recv(count)

if __name__ == '__main__':
    s = PersistentSocket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 2300))
    print(s.recv(1)