【问题标题】:Can't overload python socket.send不能重载python socket.send
【发布时间】:2010-05-14 09:21:21
【问题描述】:

我们可以看到,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")

输出:

PolySocket init
connecting...
connected
PolySocket sendall

【问题讨论】:

标签: python inheritance overloading


【解决方案1】:

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

如果你真的需要模拟对象,请使用代理对象:

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")

这是输出:

% python foo.py
PolySocket init
connecting...
connected
PolySocket send
PolySocket sendall

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 2016-09-08
    • 2022-01-14
    • 2013-10-12
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多