我的问题是关于课堂设计,我目前的方法受到this question/answer的启发。从那里开始,我创建了多个类Foobar
的实例,这些实例被收集并可以通过类Foobar_Collection
访问。另外,类Foo
应该有一些偶尔为所有实例调用的方法。现在,根据方法的结果,有没有办法立即删除实例?
class Foobar_Collection(dict):
def __init__(self, *arg, **kw):
super(Foobar_Collection, self).__init__(*arg,**kw)
def foobar(self,*arg,**kw):
foo = Foo(*arg,**kw)
self[foo.name] = foo
return ins
class Foo(object):
def __init__(self,name,something):
self.name = name
self.something = something
# just some toy example method
def myMethod(self,x):
if x < 0:
#delete self
else:
print(x)
修改
到目前为止,这是我的想法,但这不是&#34;立即&#34;而它&#34;外面&#34;。
fc_collection = Foobar_Collection()
fc_collection.foobar( 'first', 42 )
fc_collection.foobar( 'second', 77 )
for name in fc_collection:
# x will actually be a class attribute, for simplicity:
if x<0:
del fc_collection[name]
else
print(x)
答案 0 :(得分:0)
通常当你有一个物体自杀时,你知道你的设计是错误的。这就是这种情况。
你有Foobar负责将Foos添加到集合中,但是你希望Foo负责从集合中删除它自己。
要么Foobar管理集合,要么Foo管理集合。这样,只有其中一个人知道,例如,集合的性质。在您的情况下,两个类都需要知道集合是一个字符,其键是foo.name
。
一旦你弄明白谁处理了这个集合,你就会发现Foos不再需要自己删除了,普通的Python垃圾收集器也能正常工作。