无法重载python套接字.send

2024-10-01 11:41:36 发布

您现在位置:Python中文网/ 问答频道 /正文

如我们所见,send方法没有重载。在

from socket import socket

class PolySocket(socket):

    def __init__(self,*p):
        print "PolySocket init"
        socket.__init__(self,*p)

    def sendall(self,*p):
        print "PolySocket sendall"
        return socket.sendall(self,*p)

    def send(self,*p):
        print "PolySocket send"
        return socket.send(self,*p)


    def connect(self,*p):
        print "connecting..."
        socket.connect(self,*p)
        print "connected"

HOST="stackoverflow.com"   
PORT=80
readbuffer=""

s=PolySocket()
s.connect((HOST, PORT))
s.send("a")
s.sendall("a")

输出:

^{pr2}$

Tags: 方法fromimportselfsendhostreturninit
1条回答
网友
1楼 · 发布于 2024-10-01 11:41:36

我确信你实际上并不需要它,还有其他方法来解决你的任务(不是子类化而是真正的任务)。在

如果您确实需要模拟对象,请使用代理对象:

from socket import socket


class PolySocket(object):
    def __init__(self, *p):
        print "PolySocket init"
        self._sock = socket(*p)

    def __getattr__(self, name):
        return getattr(self._sock, name)

    def sendall(self, *p):
        print "PolySocket sendall"
        return self._sock.sendall(*p)

    def send(self, *p):
        print "PolySocket send"
        return self._sock.send(*p)

    def connect(self, *p):
        print "connecting..."
        self._sock.connect(*p)
        print "connected"

HOST = "stackoverflow.com"
PORT = 80
readbuffer = ""

s = PolySocket()
s.connect((HOST, PORT))
s.send("a")
s.sendall("a")

输出如下:

^{pr2}$

相关问题 更多 >