2010-05-14 9 views
5

अधिभारित नहीं कर सकता है जैसा कि हम देख सकते हैं, विधि को ओवरलोड नहीं किया गया है।पाइथन 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/brows_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

धन्यवाद, यह बहुत अच्छा था। –