【问题标题】:How do I delete a object from inside the class that it uses? [closed]如何从它使用的类中删除对象? [关闭]
【发布时间】:2021-10-01 04:06:20
【问题描述】:

我正在尝试使用 Python 中的类制作联系人应用程序以熟悉 OOP。我想在Contact 类中有一个函数delete() 删除对象(将对象/变量设置为None

代码:

class Contact():
    def __init__(self, name, number, contact):
        self.name = name
        self.number = number
        self.contact = contact
    
    def delete(self):
        # delete object a
        return
    

a = Contact("test", 5358938, "a@gmail.com")
a.remove()
# a should now be None

【问题讨论】:

  • Python 通常没有删除东西的概念。它们通常会被遗忘,python 会在你之后清理。无论如何,如果您不再需要 Contact 的属性,为什么还要更改它?请使用不再需要 a 的示例更新您的代码。
  • 如果你想删除一个实例,你必须在类之外进行。我认为您不能在其类中删除该实例。
  • 嗯,这就是你的答案。如果变量存储在列表中,则只需将其从列表中删除即可。
  • 只需使用del obj 而不是obj.Remove()>

标签: python python-3.x class object oop


【解决方案1】:

你需要在这里至少有两个类;一个是项目本身,然后是一个数据容器,用于保存具有这些项目集合的特征的项目。

(并且该容器可能是 Python 容器,因此您可以使用该容器的方法添加或删除...)

举个简单的例子,假设您想要一个您认为是联系人的姓名和号码列表。

首先你需要定义一个Contact 以及它到底是什么:

class Contact:
    # This is for an individual contact
    def __init__(self, name, number):
        self.name = name
        self.number = number
        
    def __str__(self):
        # this defines how a Contact is converted to a string
        return ','.join(e for e in (self.name, self.number))

    # commonly you would add a way to sort a contact

这个对象很容易通过添加其他字段来扩展。您只需使用Contact 做的就是:

  1. 定义什么是联系人;
  2. 也许如何打印一个;
  3. 也许如何排序。

现在就是联系人。但是可能有更多类型的项目,例如一个用于个人联系人,另一种用于公司,另一种用于专业,等等...)

现在考虑拥有这些联系人的托管列表。现在您需要定义一个作为联系人列表的类以及该列表是否有任何特殊属性:

class ContactList:     
    def __init__(self, *contacts):
        self.contacts=[e for e in contacts]
        
    def __str__(self):
        return '\n'.join(str(e) for e in self.contacts)
    
    def remove(self, name):
        self.contacts=[e for e in self.contacts if e.name!=name]
        
    def add(self, contact):
        self.contacts.append(contact) 

现在你有足够的功能来制作电话列表了:

contacts=ContactList(Contact('bob','x34'), Contact('alice','x25'))
print(contacts)
bob,x34
alice,x25

contacts.remove('alice')
print(contacts)
bob,x34

contacts.add(Contact('ted', 'x67'))
print(contacts)
bob,x34
ted,x67

在 ContactList 类中,您可能具有执行以下功能的功能:

  1. 创建一个新的联系人列表;
  2. 添加或删除联系人;
  3. 合并联系人;
  4. 打印或排序联系人列表;
  5. 获取个人联系人;
  6. 查询联系人(住在迈阿密的每个人......);
  7. 将联系人列表保存到文件或从文件中读取;
  8. 将联系人列表合并在一起;
  9. 等等等等等等。

【讨论】:

    【解决方案2】:

    正如您在删除方法中看到的那样,我添加了字典,然后添加了键名和值编号,您也可以添加电子邮件,之后只需删除键即可删除所有值

    class Contact():
    def __init__(self, name, number, contact):
        self.name = name
        self.number = number
        self.contact = contact
        
    def remove(self,name):
        a={}
        a[name] = self.number
        print(a)
        del a[name]
        print(a)
    
    
    a = Contact("test", 5358938, "a@gmail.com")
    a.remove("test")
    

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多