从类实例python中删除属性

时间:2015-03-13 14:04:15

标签: python class oop attributes

我有示例类:

class A():
    other_attribute = 2
    def __init__(self):
        setattr(A,"my_attribute",1)

a = A()

如何从实例中删除my_attributeother_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,但我不再需要它了。但在其他情况下是其他属性,我不想改变。

2 个答案:

答案 0 :(得分:5)

other_attributemy_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}