从类实例python中删除属性

从类实例python中删除属性,python,class,oop,attributes,Python,Class,Oop,Attributes,我有一个例子课: class A(): other_attribute = 2 def __init__(self): setattr(A,"my_attribute",1) a = A() 如何从实例中删除my_属性和other_属性 另外,为了更好地解释这个问题,我编辑了代码。例如,我有一个类,它动态地添加属性 class A(): def __init__(self, attribute_name, attribute_value):

我有一个例子课:

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

a = A()
如何从实例中删除
my_属性
other_属性

另外,为了更好地解释这个问题,我编辑了代码。例如,我有一个类,它动态地添加属性

class A():
    def __init__(self, attribute_name, attribute_value):
        setattr(A, attribute_name, attribute_value)

a = A("my_attribute", 123)

我在实例
a
中创建了
my_属性
,但是我不再需要它了。但在其他实例中有其他属性,我不想更改。

其他属性
我的属性
不是实例上的属性。它们是类上的属性。您必须从中删除属性,或者提供具有相同名称(和不同值)的实例属性来屏蔽类属性

从类中删除属性意味着它们在任何实例上都不再可用


不能“删除”单个实例上的类属性。如果某个属性不是由所有实例共享的,则不要将其设为类属性。

其他属性由某个实例的所有实例共享,这意味着它是

  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}

other\u属性
不在实例上。@AshwiniChaudhary:my\u属性也不在实例上。@MartijnPieters Oops!我没有看到他们在
setattr中使用
A
实际上,我需要在实例中动态添加和删除属性。例如,我将进行class
测量。在初始化中,我将添加属性,如“电压”、“时间”、“温度”,它们将是值列表。但是如果我想删除其中一些呢?例如,有些情况下有“电压”和“温度”。我不再需要“电压”。但是其他实例有其他属性。@artsin:那么将它们设置为
self
上的属性,而不是类上的属性。@Martijn Pieters:谢谢你,Martijn!