输出类中的所有成员定义为列表

时间:2010-12-17 14:24:02

标签: python class methods

您好 我有一个类本质上是一个包含一堆对象的列表对象。我尝试定义一个返回所有成员的方法,但它失败了。 我的代码是:

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问题是getTribuner方法。

/Andy.l

6 个答案:

答案 0 :(得分:3)

也许你想要

def getTribuner(self):
    return self.__Tribuner

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

我建议公开标准Python sequence interface而不是自定义方法名称。在您的情况下,只需从Stadion派生list即可。

答案 1 :(得分:2)

第一次点击return tr时,它会退出。您要么返回生成器(yield tr),要么只返回return self.__Tribuner

答案 2 :(得分:1)

尝试:

def getTribuner(self):
    return self.__Tribuner

如果您不想立即退回列表,可以使用generator,如下所示:

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

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

这将返回包含self.__Tribuner中所有成员的列表。

旁注:关于python中的getter和setter,请参阅这篇文章:

答案 3 :(得分:1)

如果您想要遍历这些项目,请在getTribuner中为return交换yield

答案 4 :(得分:0)

来自UserList.UserList的子类,所有这些都变得容易多了。 :)或直接从列表。或者甚至更好地做到这一点:

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

完成。多数民众赞成你需要的。你想添加一个SitteTribun:

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

获得所有Tribuner:

stadion.tribuner

循环播放:

for tribun in stadion.tribuner:
    whatevah()

计数:

len(stadion.tribuner)

是。 Python真的很容易。 : - )

答案 5 :(得分:0)

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

在您的代码中,将stadion.GetTribuner()替换为stadion.tribuner。将stadion.SetTribuner(t)替换为stadion.tribuner = t。要迭代tribuner,请使用for x in stadion.tribuner:现在您使用的是Python而不是Java编程。