我想知道如何在一个类中删除一个值

时间:2018-06-28 10:58:38

标签: python python-3.x

我在使用delContact方法时遇到了麻烦,因为我想删除类似于delVar的对象,但是我不知道如何尝试过all = None或del all。但是当我在delContact()之后调用show方法/函数时,我想要删除的值仍然显示

class Phonebook:

    def __init__(self,name,type,email,phone):

        self.name = name
        self.type = type
        self.email = email
        self.phone = phone

        print('Adding {} as a Contact with an email of {} and a phone number of {}'.format(self.name,self.email,self.phone))

    def tell(self):

        print('Name: {} | Type: {} | Email: {} | Phone: {}'.format(self.name,self.type,self.email,self.phone))

    def retName(self):

        return  self.name

All = []

def addContact():
    name = input('Enter your the name please: ')
    type = input('Enter the type of the Contact Please: ')
    email = input('Enter the the email of the Contact Please: ')
    phone = input('Enter the Phone number of the Contact Please: ')

    merge = Phonebook(name,type,email,phone)

    All.append(merge)

def show():

    for all in All:
        all.tell()

def delContact():

    show()

    delVar = input('Enter the name you want to delete: ')

    for all in All:

        if all.retName() == delVar:
            print(all.retName())
            all = ''
        else:
            continue



addContact()
addContact()
show()
delContact()
show()

1 个答案:

答案 0 :(得分:2)

这里:

for all in All:
    if all.retName() == delVar:
        print(all.retName())
        all = ''

您没有删除任何内容,只是将本地名称all重新绑定到空字符串。要从列表中删除项目,您必须使用All.remove(item)

for all in All:
    if all.retName() == delVar:
        All.remove(all)
        break

请注意,如果您有多个同名物品,则只会删除第一个...

还请注意,修改要迭代的列表可能会导致意外结果。在这种情况下是安全的,因为我们立即退出循环,但这通常是要避免的事情。

另一种更安全并会删除所有匹配项的解决方案是过滤列表,并用结果替换原始列表:

All[:] = [item for item in All if item.name != delVar]

哦,是的,您的retName方法完全没有用,name是您的类的公共属性。