在方法调用期间删除条件实例?

时间:2017-01-23 19:23:45

标签: python class garbage-collection

我的问题是关于课堂设计,我目前的方法受到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)    

1 个答案:

答案 0 :(得分:0)

通常当你有一个物体自杀时,你知道你的设计是错误的。这就是这种情况。

你有Foobar负责将Foos添加到集合中,但是你希望Foo负责从集合中删除它自己。

要么Foobar管理集合,要么Foo管理集合。这样,只有其中一个人知道,例如,集合的性质。在您的情况下,两个类都需要知道集合是一个字符,其键是foo.name

一旦你弄明白谁处理了这个集合,你就会发现Foos不再需要自己删除了,普通的Python垃圾收集器也能正常工作。