我正在尝试覆盖python类(第一次这样做),我似乎无法覆盖此方法。当我运行它时,我的recv方法不会运行。它运行超类的方法。我在这做错了什么? (顺便说一下,这是python 2.7。)
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)
答案 0 :(得分:4)
套接字类型(正式socket.SocketType
,虽然socket.socket
碰巧是同一个对象)但是实现recv
和其他一些方法作为实例属性的奇怪选择,而不是类dict中的常规方法。在socket.SocketType.__init__
中,它设置了self.recv
实例属性,该属性会覆盖您尝试定义的recv
方法。