简体   繁体   English

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

[英]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. 唯一的问题是getTribuner方法。

/Andy.l /安迪

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. 我建议公开标准的Python序列接口,而不是您的自定义方法名称。 In your case it would be easiset to just derive Stadion from list . 在您的情况下,仅从list派生Stadion将很容易。

The first time it hits return tr , it will quit. 第一次到达return tr ,它将退出。 You either want to return a generator ( yield tr ) or just return self.__Tribuner . 您要么想要返回一个生成器( yield tr ),要么只return self.__Tribuner

Try: 尝试:

def getTribuner(self):
    return self.__Tribuner

If don't want to return the list at once, you can use a generator , like so: 如果不想立即返回列表,则可以使用generator ,如下所示:

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 . 这将返回一个列表,其中包含self.__Tribuner所有成员。

Sidenote: Concerning getters and setters in python, see this article: 旁注:关于python中的getter和setter方法,请参阅本文:

如果你想通过项目重复,交换returnyield在getTribuner。

Subclass from UserList.UserList , and all this get's much easier. UserList.UserList子类,所有这些都变得更加容易。 :) 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: 您要添加SitteTribun:

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

Getting all the Tribuner: 获取所有Tribuner:

stadion.tribuner

Looping over them: 遍历它们:

for tribun in stadion.tribuner:
    whatevah()

Counting: 数数:

len(stadion.tribuner)

Yes. 是。 Python really is that easy. Python真的很容易。 :-) :-)

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

In your code, replace stadion.GetTribuner() with stadion.tribuner . 在您的代码中,将stadion.GetTribuner()替换为stadion.tribuner Replace stadion.SetTribuner(t) with stadion.tribuner = t . stadion.SetTribuner(t)替换为stadion.tribuner = t To iterate over tribuner, use for x in stadion.tribuner: Now you're programming in Python rather than in Java. 要遍历tribuner,请在stadion.tribuner中使用for x in stadion.tribuner:现在,您正在使用Python而不是Java进行编程。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM