我有示例类:
class A():
other_attribute = 2
def __init__(self):
setattr(A,"my_attribute",1)
a = A()
如何从实例中删除my_attribute
和other_attribute
?
PS。我编辑了代码以更好地解释问题。例如,我有类,它动态添加属性
class A():
def __init__(self, attribute_name, attribute_value):
setattr(A, attribute_name, attribute_value)
a = A("my_attribute", 123)
我在实例my_attribute
中创建了a
,但我不再需要它了。但在其他情况下是其他属性,我不想改变。
答案 0 :(得分:5)
other_attribute
和my_attribute
不是实例上的属性。它们是类的属性。您必须从那里删除属性,或者提供具有相同名称(和不同值)的实例属性来掩盖类属性。
从类中删除属性意味着它们在任何实例上不再可用。
你无法删除'单个实例上的类属性。如果所有实例都不共享某个属性,请不要将它们作为类属性。
答案 1 :(得分:3)
other_attribute由A的所有实例共享,这意味着它是
的一部分 A.__dict__
字典。如果在构造函数中初始化属性,则可以为类的一个实例执行此操作:
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}