Вывести все члены из класса, определенного как список - PullRequest
1 голос
/ 17 декабря 2010

Привет У меня есть класс, который по сути является объектом списка, содержащим кучу объектов. Я пытаюсь определить метод, чтобы вернуть все члены, но это не удается. Мой код:

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

Моя проблема в методе getTribuner.

/ Andy.l

Ответы [ 6 ]

3 голосов
/ 17 декабря 2010

Может быть, вы хотите

def getTribuner(self):
    return self.__Tribuner

или

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

Я бы порекомендовал выставить стандартный интерфейс последовательности Python вместо имен пользовательских методов.В вашем случае было бы просто получить Stadion из list.

2 голосов
/ 17 декабря 2010

В первый раз, когда он нажмет return tr, он выйдет. Вы либо хотите вернуть генератор (yield tr), либо просто return self.__Tribuner.

1 голос
/ 17 декабря 2010

Если вы хотите перебрать элементы, поменяйте return на yield в getTribuner.

1 голос
/ 17 декабря 2010

Попробуйте:

def getTribuner(self):
    return self.__Tribuner

Если вы не хотите возвращать список сразу, вы можете использовать генератор , например:

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

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

Это вернет список со всеми членами в self.__Tribuner.

Sidenote: Что касается геттеров и сеттеров в python, см. Эту статью:

0 голосов
/ 17 декабря 2010
class Stadion(object):
    def __init__(self, tribuner):
        self.tribuner = tribuner

В вашем коде замените stadion.GetTribuner() на stadion.tribuner. Заменить stadion.SetTribuner(t) на stadion.tribuner = t. Чтобы перебрать трибуны, используйте for x in stadion.tribuner: Теперь вы программируете на Python, а не на Java.

0 голосов
/ 17 декабря 2010

Подкласс от UserList.UserList, и все это становится намного проще.:) Или прямо из списка.Или даже лучше сделать это:

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

Готово.Это все, что вам нужно.Вы хотите добавить SitteTribun:

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

Получение всех трибунов:

stadion.tribuner

Цикл над ними:

for tribun in stadion.tribuner:
    whatevah()

Подсчет:

len(stadion.tribuner)

Да.Python действительно так прост.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...