On Mar 19, 10:21 pm, Esmail <ebo...@gmail.com> wrote: > Hi, > > I'm new to writing Python code. This is a simple client I wrote, it > works, but I feel it doesn't look as clean as it could. Can anyone > make suggestions how to streamline this code? > > Also, I am using two nested functions, it seems that nested functions > aren't used that much in Python - is that correct? And if so, how > come? > > thanks, > > Esmail > > ps: I realize there is minimal error checking/exception handling. > > #!/usr/bin/env python > > import sys > from socket import * > from threading import Thread > > class Client(object): > def __init__(self, host="localhost", port=5555, name = "esmail"): > self._host = host > self._port = port > self._name = name > self._address=(self._host, self._port) > self._sock=socket(AF_INET, SOCK_STREAM) > self._sock.connect(self._address) > self._parent = self > self._keepGoing = True > > def info(self): > return self._host, self._port, self._name > > class Listener(Thread): > def __init__(self, parent, tname="listener"): > Thread.__init__(self,name = tname) > self._parent = parent > print self._parent._host > > def run(self): > > while self._parent._keepGoing: > m = self._parent._sock.recvfrom(1024) > print m[0] > > class Speaker(Thread): > def __init__(self, parent, tname = "speaker"): > Thread.__init__(self,name = tname) > self._parent = parent > self._parent._sock.send(self._parent._name + "\n") > > def run(self): > > while(True): > m = raw_input("-> ") > if m == "bye": > self._parent._sock.send(self._parent._name + " is > signing off.\n") > self._parent._sock.send("bye\n") > self._parent._keepGoing = False > break; > else: > self._parent._sock.send(m + "\n") > > def main(): > > if len(sys.argv) == 4: # prog name + 3 args > host = sys.argv[1] > port = int(sys.argv[2]) > name = sys.argv[3] > c = Client(host, port, name) > else: > c = Client() > > print "Client connecting to - host=%s port=%d name=%s" % c.info > () > > s = Client.Speaker(c) > s.start() > > l = Client.Listener(c) > l.start() > > main()
How about renaming the Client to SocketConfig, Listener to ClientListener and Speaker to ClientSpeaker and put all at the same level. The you can do this: c = SocketConfig(host, port, name) s = ClientSpeaker(c) l = ClientListener(c) the other option would be to create a Speaker and Listener factory in Client that returns Speakers and Listeners so you can do: c = Client(host, port, name) s = c.Speaker() l = c.Listener() -- http://mail.python.org/mailman/listinfo/python-list