您好 我有一个类本质上是一个包含一堆对象的列表对象。我尝试定义一个返回所有成员的方法,但它失败了。 我的代码是:
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
答案 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编程。