Esmail 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?

What you wrote are two nested classes, not functions. In my opinion, neither should be nested. Nothing is gained and something is lost. Neither are used by client; indeed both use client.

Nested classes are rare because they have little use and are almost never necessary.

Nested functions are a different story.

I would rename '_parent' (misleading) as 'client' or 'user'.

Terry Jan Reedy


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

Makes no sense in the code given.

        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()
--
http://mail.python.org/mailman/listinfo/python-list


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to