[英]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方法,请参阅本文:
如果你想通过项目重复,交换return
的yield
在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.