这是我当前的代码:
class gym():
def __init__(self,gymname):
self.gymname=gymname
self.memlist=[]
def regMem(self,obj):
if obj.ageMember()==True:
self.memlist.append(obj)
return True, "mem in!!!"
def printMem(self):
for n in self.memlist:
print(n)
class gymMember():
def __init__(self,fname,lname,age):
self.fname=fname
self.lname=lname
self.age=age
def __str__(self):
return(str(self.fname)+str(self.lname)+str(self.age))
def ageMember(self):
if self.age>=18:
return True
def printMemlist(self):
for n in self.memlist:
print(n)
yes='y'
while yes=="y":
g=gym("gym")
name=input('enter f name')
lname=input('enter l name')
age=int(input('enter age'))
n=gymMember(name,lname,age)
print(g.regMem(n))
g.printMem()
我正在尝试通过用户输入创建多个gymMember
对象,但是当我将所有体育馆成员打印出memlist
时,只会显示最近的体育馆成员,而不是以前的体育馆成员。我的目标是获取用户输入,创建gymMember
对象,然后将其存储在带有列表gym
的容器类memlist
中:
enter f namejosh
enter l namelawmen
enter age23
(True, 'mem in!!!')
joshlawmen23
enter f nametory
enter l nameloome
enter age28
(True, 'mem in!!!')
toryloome28
enter f name
如您所见,当我打印出列表时,仅显示最新的对象。我该如何解决?
答案 0 :(得分:1)
您已将g=gym("EzGym")
放入了while循环中。在while循环的每次迭代中,都会创建gym
类的新实例。创建gym
的新实例时,还将创建一个新的空列表(请参见第4行:self.memlist=[]
)。
因此,执行gymMember
时不会获得先前添加的printMem()
实例。
您可以通过将g=gym('EzGym')
移到while循环之外来解决此问题。
class gym():
def __init__(self,gymname):
self.gymname=gymname
self.memlist=[]
def regMem(self,obj):
if obj.ageMember()==True:
self.memlist.append(obj)
return True, "mem in!!!"
def printMem(self):
for n in self.memlist:
print(n)
class gymMember():
def __init__(self,fname,lname,age):
self.fname=fname
self.lname=lname
self.age=age
def __str__(self):
return(str(self.fname)+str(self.lname)+str(self.age))
def ageMember(self):
if self.age>=18:
return True
def printMemlist(self):
for n in self.memlist:
print(n)
yes='y'
g=gym("EzGym") # shift this line outside of the while loop
while yes=="y":
name=input('enter f name')
lname=input('enter l name')
age=int(input('enter age'))
n=gymMember(name,lname,age)
print(g.regMem(n))
g.printMem()