Python是一种面向对象的编程语言。我们在编程时经常使用用自定义类定义的对象。在这篇文章中,我们将讨论如何在Python中从一个对象中删除一个属性。
在Python中使用del语句从一个对象中删除属性
del 语句可以用来删除任何对象以及它的属性。del 语句的语法如下。
del object_name
为了了解我们如何从一个对象中删除一个属性,让我们首先创建一个自定义类Person ,其属性为name,age,SSN, 和weight 。
class Person:
def __init__(self, name, age, SSN, weight):
self.name = name
self.age = age
self.SSN = SSN
self.weight = weight
现在我们将在Person 类中创建一个名为person1 的对象。之后,我们将使用del 语句从person1 对象中删除属性weight ,如下所示。
class Person:
def __init__(self, name, age, SSN, weight):
self.name = name
self.age = age
self.SSN = SSN
self.weight = weight
def __str__(self):
return "Name:" + str(self.name) + " Age:" + str(self.age) + " SSN: " + str(self.SSN) + " weight:" + str(
self.weight)
person1 = Person(name="Will", age="40", SSN=1234567890, weight=60)
print(person1)
del person1.weight
print(person1)
输出。
Name:Will Age:40 SSN: 1234567890 weight:60
Traceback (most recent call last):
File "/home/aditya1117/PycharmProjects/pythonProject/string1.py", line 16, in <module>
print(person1)
File "/home/aditya1117/PycharmProjects/pythonProject/string1.py", line 10, in __str__
self.weight)
AttributeError: 'Person' object has no attribute 'weight'
在上面的例子中,你可以看到在执行del 语句之前,我们可以打印属性weight 。当我们在执行del 语句后试图打印属性weight ,程序会遇到AttributeError 异常,说对象中没有名为weight 的属性。因此,我们已经成功地使用python中的del 语句从对象中删除了该属性。
使用Python中的delattr()函数从一个对象中删除属性
我们也可以使用 delattr() 函数从一个对象中删除一个属性。delattr() 函数接受一个对象作为它的第一个输入参数,接受属性名称作为它的第二个输入参数。执行后,它将从给定的对象中删除该属性。你可以在下面的例子中观察到这一点。
class Person:
def __init__(self, name, age, SSN, weight):
self.name = name
self.age = age
self.SSN = SSN
self.weight = weight
def __str__(self):
return "Name:" + str(self.name) + " Age:" + str(self.age) + " SSN: " + str(self.SSN) + " weight:" + str(
self.weight)
person1 = Person(name="Will", age="40", SSN=1234567890, weight=60)
print(person1)
delattr(person1, "weight")
print(person1)
输出。
Name:Will Age:40 SSN: 1234567890 weight:60
Traceback (most recent call last):
File "/home/aditya1117/PycharmProjects/pythonProject/string1.py", line 16, in <module>
print(person1)
File "/home/aditya1117/PycharmProjects/pythonProject/string1.py", line 10, in __str__
self.weight)
AttributeError: 'Person' object has no attribute 'weight'
你可以观察到,在执行delattr() 函数之前,我们能够打印person1 对象的weight 属性。在执行delattr() 函数后,当我们试图打印person1 对象的weight 属性时,程序会引发AttributeError 异常,表示该属性已被删除。
如果我们传递一个在对象中不存在的属性名称,就会引发AttributeError 异常,如下图所示。
class Person:
def __init__(self, name, age, SSN, weight):
self.name = name
self.age = age
self.SSN = SSN
self.weight = weight
def __str__(self):
return "Name:" + str(self.name) + " Age:" + str(self.age) + " SSN: " + str(self.SSN) + " weight:" + str(
self.weight)
person1 = Person(name="Will", age="40", SSN=1234567890, weight=60)
print(person1)
delattr(person1, "BMI")
print(person1)
输出。
Name:Will Age:40 SSN: 1234567890 weight:60
/usr/lib/python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.7) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
Traceback (most recent call last):
File "/home/aditya1117/PycharmProjects/pythonProject/string1.py", line 15, in <module>
delattr(person1, "BMI")
AttributeError: BMI
在这里,你可以看到我们试图从person1 对象中删除BMI 属性,而这个属性并不存在于该对象中。因此,程序遇到了AttributeError 异常。
总结
在这篇文章中,我们讨论了在Python中从一个对象中删除属性的两种方法。