从类实例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!