从 class 个实例 python 中删除属性
Delete attribute from class instance python
我有例子class:
class A():
other_attribute = 2
def __init__(self):
setattr(A,"my_attribute",1)
a = A()
如何从实例中删除 my_attribute
和 other_attribute
?
PS。我编辑了代码以更好地解释问题。例如我有class,动态添加属性
class A():
def __init__(self, attribute_name, attribute_value):
setattr(A, attribute_name, attribute_value)
a = A("my_attribute", 123)
我创建了 my_attribute
,例如 a
,但后来我不再需要它了。但在其他情况下还有其他属性,我不想更改。
other_attribute
和 my_attribute
不是实例的属性。它们是 class 上的属性。您必须从那里删除属性,或提供具有相同名称(和不同值)的实例属性来屏蔽 class 属性。
从 class 中删除属性意味着它们将不再适用于 任何 实例。
您不能 'delete' class 个别实例的属性。如果一个属性不被所有实例共享,不要让它们成为 class 个属性。
other_attribute 由 A 的所有实例共享,这意味着它是
的一部分
A.__dict__
词典。如果您在构造函数中初始化属性,则可以为 class 的一个实例执行此操作:
class A:
def __init__(self):
self.attrib = 2
self.attrib2 = 3
a = A()
print "Before " + str(a.__dict__)
del a.__dict__["attrib"];
print "After " + str(a.__dict__)
输出为:
Before {'attrib2': 3, 'attrib': 2}
After {'attrib2': 3}
我有例子class:
class A():
other_attribute = 2
def __init__(self):
setattr(A,"my_attribute",1)
a = A()
如何从实例中删除 my_attribute
和 other_attribute
?
PS。我编辑了代码以更好地解释问题。例如我有class,动态添加属性
class A():
def __init__(self, attribute_name, attribute_value):
setattr(A, attribute_name, attribute_value)
a = A("my_attribute", 123)
我创建了 my_attribute
,例如 a
,但后来我不再需要它了。但在其他情况下还有其他属性,我不想更改。
other_attribute
和 my_attribute
不是实例的属性。它们是 class 上的属性。您必须从那里删除属性,或提供具有相同名称(和不同值)的实例属性来屏蔽 class 属性。
从 class 中删除属性意味着它们将不再适用于 任何 实例。
您不能 'delete' class 个别实例的属性。如果一个属性不被所有实例共享,不要让它们成为 class 个属性。
other_attribute 由 A 的所有实例共享,这意味着它是
的一部分 A.__dict__
词典。如果您在构造函数中初始化属性,则可以为 class 的一个实例执行此操作:
class A:
def __init__(self):
self.attrib = 2
self.attrib2 = 3
a = A()
print "Before " + str(a.__dict__)
del a.__dict__["attrib"];
print "After " + str(a.__dict__)
输出为:
Before {'attrib2': 3, 'attrib': 2}
After {'attrib2': 3}