通过用户输入制作多个对象

时间:2019-11-12 01:13:41

标签: python

这是我当前的代码:

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

如您所见,当我打印出列表时,仅显示最新的对象。我该如何解决?

1 个答案:

答案 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()