2010-05-14 3 views
5

우리가 볼 수 있듯이 send 메소드가 오버로드되지 않습니다.python socket.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 
+0

관련 : http://www.mail-archive.com/python- [email protected]/msg126934.html, http://groups.google.com/group/comp.lang.python/browse_thread/thread/391728cd442339c8/c0581b9ee5e7ceaf, http://groups.google.com/group/comp. lang.python/browse_thread/thread/76d27388b0d286fa/c9849013e37c995b – ChristopheD

답변

8

나는 당신이 실제로 필요하지 않으며 (서브 클래스하지하지만 실제 작업) 귀하의 작업을 해결할 수있는 다른 방법이 있습니다 확신합니다.

당신이 정말로, 객체를 조롱 프록시 객체로 이동해야하는 경우 : 여기

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 
+0

감사합니다. –

관련 문제