Dynamically naming objects.

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kalibr

    Dynamically naming objects.

    I've been developing a small script to fiddle with classes, and came
    accross the following problem. Assuming I get some user input asking
    for a number, how would I spawn 'n' objects from a class?

    i.e. I have a class class 'user' and I don't know how many of them I
    want to spawn.

    Any ideas?
  • Hans Nowak

    #2
    Re: Dynamically naming objects.

    Kalibr wrote:
    I've been developing a small script to fiddle with classes, and came
    accross the following problem. Assuming I get some user input asking
    for a number, how would I spawn 'n' objects from a class?
    >
    i.e. I have a class class 'user' and I don't know how many of them I
    want to spawn.
    >
    Any ideas?
    Sure. This will give you a list of n instances of user:

    [user() for i in range(n)]

    Of course, you could also use a good old for loop:

    for i in range(n):
    u = user()
    ...do something with u...

    Hope this helps!

    --
    Hans Nowak (zephyrfalcon at gmail dot com)

    Comment

    • Kalibr

      #3
      Re: Dynamically naming objects.

      On Jun 7, 1:20 pm, Hans Nowak <zephyrfalcon!N O_SP...@gmail.c omwrote:
      Kalibr wrote:
      I've been developing a small script to fiddle with classes, and came
      accross the following problem. Assuming I get some user input asking
      for a number, how would I spawn 'n' objects from a class?
      >
      i.e. I have a class class 'user' and I don't know how many of them I
      want to spawn.
      >
      Any ideas?
      >
      Sure. This will give you a list of n instances of user:
      >
      [user() for i in range(n)]
      >
      Of course, you could also use a good old for loop:
      >
      for i in range(n):
      u = user()
      ...do something with u...
      >
      Hope this helps!
      >
      --
      Hans Nowak (zephyrfalcon at gmail dot com)http://4.flowsnake.org/
      whoops, replied to author....

      What I wanted to ask before was won't 'u' be overwritten with a new
      object each time the loop ticks over?

      what I want to do is have, say 5 users in a game, so I'd have to spawn
      5 objects. I can't do that because I have'nt hardcoded any object
      names for them.

      or does it somehow work? how would I address them if they all have the
      name 'u'?

      Comment

      • Ben Finney

        #4
        Re: Dynamically naming objects.

        Kalibr <space.captain. face@gmail.comw rites:
        what I want to do is have, say 5 users in a game, so I'd have to
        spawn 5 objects. I can't do that because I have'nt hardcoded any
        object names for them.
        Python's built-in mapping type 'dict' is a good fit for this.

        Given:

        * a 'User' class that is initialised with the user's name

        * some way of getting a sequence of names (that you haven't told us
        yet), that I'll bind here to the name 'sequence_of_na mes'

        You can then write::

        game_users = {}
        for name in sequence_of_nam es:
        game_users[name] = User(name)

        This will result in 'game_users' bound to a dict with names mapping to
        separate instances of the 'User' type. These instances can each be
        addressed by name from the 'game_users' mapping as
        'game_users["Fred"]', etc.

        --
        \ "Pinky, are you pondering what I'm pondering?" "Well, I think |
        `\ so, Brain, but do I really need two tongues?" -- _Pinky and |
        _o__) The Brain_ |
        Ben Finney

        Comment

        • Alan Isaac

          #5
          Re: Dynamically naming objects.

          On Jun 7, 1:20 pm, Hans Nowak
          > [user() for i in range(n)]

          Kalibr wrote:
          or does it somehow work? how would I address them if they all have the
          name 'u'?

          users = list(User() for i in range(n))
          for user in users:
          user.do_somethi ng()

          hth,
          Alan Isaac

          Comment

          • stefaan.himpe

            #6
            Re: Dynamically naming objects.

            Hello,

            You can use this as indicated by Hans:
            > u = [user() for i in xrange(5)]
            where "user" is a class or a function returning an object.
            u then is a list of "user" objects.
            or does it somehow work? how would I address them if they all have the
            name 'u'?
            You'd access members of the list as u[0], u[1], ... etc.
            I think you'd benefit from reading an introductory programming book.

            Best regards,
            Stefaan.

            Comment

            • Kalibr

              #7
              Re: Dynamically naming objects.

              Thanks for all this info.

              I'll try all your scripts out.

              from what you guys have said, I did the following:

              I set up a 'computer class' (I'lm leaving out the mutators)

              class computer:

              def __init__(self, IP, owner, ph_connections, connections):

              assert isIP(IP) == True
              self.IP = IP
              self.owner = owner

              for i in ph_connections:
              assert isIP(i) == True
              self.ph_connect ions = ph_connections

              for i in connections:
              assert isIP(i) == True
              self.connection s = connections

              isIP(IP) is a function that checks if it looks like an IP based on
              some rules.

              Anyway....

              I set up a list of users, each with their computer object named after
              them, so:
              users = ['Kal', 'Noob', 'Fred']

              I ran through them with some code based vaguely on what you guys have
              said:

              for i in users:
              i = computer('<inse rt some sort of IP here>', i, [], [])

              I set up the ph_connections and connections lists as empty for ease of
              use.
              Does this code seem right? I can't get it to work.

              Comment

              • Hans Nowak

                #8
                Re: Dynamically naming objects.

                Kalibr wrote:
                On Jun 7, 1:20 pm, Hans Nowak <zephyrfalcon!N O_SP...@gmail.c omwrote:
                >Kalibr wrote:
                >>I've been developing a small script to fiddle with classes, and came
                >>accross the following problem. Assuming I get some user input asking
                >>for a number, how would I spawn 'n' objects from a class?
                >>i.e. I have a class class 'user' and I don't know how many of them I
                >>want to spawn.
                >>Any ideas?
                >Sure. This will give you a list of n instances of user:
                >>
                > [user() for i in range(n)]
                >>
                >Of course, you could also use a good old for loop:
                >>
                > for i in range(n):
                > u = user()
                > ...do something with u...
                >>
                >Hope this helps!
                >>
                >--
                >Hans Nowak (zephyrfalcon at gmail dot com)http://4.flowsnake.org/
                >
                whoops, replied to author....
                >
                What I wanted to ask before was won't 'u' be overwritten with a new
                object each time the loop ticks over?
                Yes, so you have to store it somewhere, if you want to keep the object around.
                The list comprehension mentioned above stores all the objects in a list, after
                which they can be accessed at will via indexing.
                what I want to do is have, say 5 users in a game, so I'd have to spawn
                5 objects. I can't do that because I have'nt hardcoded any object
                names for them.
                >
                or does it somehow work? how would I address them if they all have the
                name 'u'?
                users = [user() for i in range(n)]

                # use: users[0], users[1], etc

                --
                Hans Nowak (zephyrfalcon at gmail dot com)

                Comment

                • Kalibr

                  #9
                  Re: Dynamically naming objects.

                  On Jun 8, 2:58 am, Hans Nowak <zephyrfalcon!N O_SP...@gmail.c omwrote:
                  Kalibr wrote:
                  On Jun 7, 1:20 pm, Hans Nowak <zephyrfalcon!N O_SP...@gmail.c omwrote:
                  Kalibr wrote:
                  >I've been developing a small script to fiddle with classes, and came
                  >accross the following problem. Assuming I get some user input asking
                  >for a number, how would I spawn 'n' objects from a class?
                  >i.e. I have a class class 'user' and I don't know how many of them I
                  >want to spawn.
                  >Any ideas?
                  Sure. This will give you a list of n instances of user:
                  >
                  [user() for i in range(n)]
                  >
                  Of course, you could also use a good old for loop:
                  >
                  for i in range(n):
                  u = user()
                  ...do something with u...
                  >
                  Hope this helps!
                  >
                  --
                  Hans Nowak (zephyrfalcon at gmail dot com)http://4.flowsnake.org/
                  >
                  whoops, replied to author....
                  >
                  What I wanted to ask before was won't 'u' be overwritten with a new
                  object each time the loop ticks over?
                  >
                  Yes, so you have to store it somewhere, if you want to keep the object around.
                  The list comprehension mentioned above stores all the objects in a list, after
                  which they can be accessed at will via indexing.
                  >
                  what I want to do is have, say 5 users in a game, so I'd have to spawn
                  5 objects. I can't do that because I have'nt hardcoded any object
                  names for them.
                  >
                  or does it somehow work? how would I address them if they all have the
                  name 'u'?
                  >
                  users = [user() for i in range(n)]
                  >
                  # use: users[0], users[1], etc
                  >
                  --
                  Hans Nowak (zephyrfalcon at gmail dot com)http://4.flowsnake.org/
                  Ok, wait, I see where this is going.
                  I just did the list comprehension.
                  I was under some misguided idea that you actually had to have a unique
                  variable name for all the new objects you spawned. Thanks for all you
                  help guys!

                  Comment

                  Working...