为什么我不能在python中覆盖这个方法?

时间:2016-11-10 18:58:19

标签: python python-2.7 inheritance

我正在尝试覆盖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)

1 个答案:

答案 0 :(得分:4)

套接字类型(正式socket.SocketType,虽然socket.socket碰巧是同一个对象)但是实现recv和其他一些方法作为实例属性的奇怪选择,而不是类dict中的常规方法。在socket.SocketType.__init__中,它设置了self.recv实例属性,该属性会覆盖您尝试定义的recv方法。

相关问题