de-diac
de-diac

Reputation: 439

Output all members from a class defines as list

Hi I've got a class that essentially is a list object holding a bunch of objects. I try to define a method to return all members, but it fails. My code is:

class Stadion:
    def __init__(self,):
        self.__Tribuner=[]

    def setTribuner(self,tribuner):
        self.__Tribuner.append(tribuner)
    def getTribuner(self):
        pass
    def getAntallTribuner(self):
        antall=len(self.__Tribuner)
        return antall
    def addTribune(self,tribune):
        self.__Tribuner.append(tribune)
    def getTribuner(self):
        for tr in self.__Tribuner:
            return tr

Mye problem is the getTribuner method.

/Andy.l

Upvotes: 1

Views: 356

Answers (6)

Lennart Regebro
Lennart Regebro

Reputation: 172239

Subclass from UserList.UserList, and all this get's much easier. :) Or directly from list. Or even better do this:

class Stadion:
    def __init__(self,):
        self.tribuner=[]

Done. Thats all you need. You want to add a SitteTribun:

stadion = Stadion()
stadion.tribuner.append(SitteTribute())

Getting all the Tribuner:

stadion.tribuner

Looping over them:

for tribun in stadion.tribuner:
    whatevah()

Counting:

len(stadion.tribuner)

Yes. Python really is that easy. :-)

Upvotes: 0

user97370
user97370

Reputation:

class Stadion(object):
    def __init__(self, tribuner):
        self.tribuner = tribuner

In your code, replace stadion.GetTribuner() with stadion.tribuner. Replace stadion.SetTribuner(t) with stadion.tribuner = t. To iterate over tribuner, use for x in stadion.tribuner: Now you're programming in Python rather than in Java.

Upvotes: 0

miku
miku

Reputation: 188014

Try:

def getTribuner(self):
    return self.__Tribuner

If don't want to return the list at once, you can use a generator, like so:

def getTribuner(self):
    for tr in self.__Tribuner:
        yield tr

# usage it within a loop ...
for tr in instance.getTribuner():
    # process tr

This will return a list with all members in self.__Tribuner.

Sidenote: Concerning getters and setters in python, see this article:

Upvotes: 1

Randy
Randy

Reputation: 21

If you're wanting to iterate through the items, swap return for yield in getTribuner.

Upvotes: 1

nmichaels
nmichaels

Reputation: 50941

The first time it hits return tr, it will quit. You either want to return a generator (yield tr) or just return self.__Tribuner.

Upvotes: 2

Sven Marnach
Sven Marnach

Reputation: 601559

Maybe you want

def getTribuner(self):
    return self.__Tribuner

or

def getTribuner(self):
    for tr in self.__Tribuner:
        yield tr

I would recommend to expose the standard Python sequence interface instead of your custom method names. In your case it would be easiset to just derive Stadion from list.

Upvotes: 3

Related Questions