我希望能够将__delitem__
与类级变量一起使用。 我的用例可以找到here(使用_reg_funcs
的答案),但它基本上涉及一个装饰器类,它保存了它所装饰的所有功能的列表。有没有办法让我的类对象支持__delitem__
?我知道我可以为此专门保留一个实例,但我宁愿不必这样做。在类中使用__delitem__而不是Python中的实例
class Foo(object):
_instances = {}
def __init__(self, my_str):
n = len(self._instances) + 1
self._instances[my_str] = n
print "Now up to {} instances".format(n)
@classmethod
def __delitem__(cls, my_str):
del cls._instances[my_str]
abcd = Foo('abcd')
defg = Foo('defg')
print "Deleting via instance..."
del abcd['abcd']
print "Done!\n"
print "Deleting via class object..."
del Foo['defg']
print "You'll never get here because of a TypeError: 'type' object does not support item deletion"
作品,谢谢。但是我很惊讶,“当你编写del obj [key]时,Python调用obj类的__delitem__方法,而不是obj。”为什么是这样? – kuzzooroo
与其他方法一样,函数绑定到类,而不是对象,而对象是函数的隐式第一个参数。试图使'__delitem__'成为一个类方法而不是一个普通的实例方法,这将是Python不能实现的特殊情况。 – chepner