根据下面的代码示例,示例1中的bb
和示例2中的self.bb
的生命周期是什么
示例1
import B
class A:
def __init__( self ):
bb = B( self )
示例2
import B
class A:
def __init__( self ):
self.bb = B( self )
编辑:
B是另一个类,由于某种原因,我发现它不是在第一个例子中收集的垃圾。我在我的代码中仔细查看,发现B类创建了一个新的C类,并给它一个C类的方法。最后,C实例化了一个循环回来的线程来等待事件,因此B类实例仍然存活,即使已经完成了一个类init。
感谢大家的回答。
答案 0 :(得分:0)
在这两种情况下,在您实例化B
之前,不会引用A
实例。
一旦您实例化A
,在第一种情况下,它会在__init__
运行后立即被丢弃,因为bb
将超出范围,并且不会有任何参考B
1}}实例,因此它将在下一个GC循环中进行垃圾收集(确切地说是实现细节的时间)。在第二种情况下,只要存在B
实例的引用或手动删除它,就会存在对该A
实例的引用。
答案 1 :(得分:0)
在第一个示例bb
中,local variable
为__init__
,bb
变量可以在同一个__init__
函数中访问。
在第二个示例中,self.bb
对于每个类对象都是Instance variables
。
答案 2 :(得分:-2)
他们没有任何生命。你必须继承。
Example 1
import B
class A:
def __init__( self ):
B.__init__(self)
bb = B()
Example 2
import B
class A:
def __init__( self ):
B.__init__(self)
bb = B()
有关init
的详细信息