What's the life time of the variable defined in a class function?

人言落日是天涯,望极天涯不见家 kelvin.you at gmail.com
Mon Apr 30 05:42:00 EDT 2007


On Apr 30, 5:20 pm, "Diez B. Roggisch" <d... at nospam.web.de> wrote:
> 人言落日是天涯,望极天涯不见家 wrote:
> > Please see the followed example:
> > class A:
> >     def __init__(self):
> >         pass
>
> > class X:
> >     def __init__(self):
> >         n = 200
> >         if True:
> >             j = 200
> >         m = j
> >         k = A()
> >         print m, j
>
> > a = X()
> > # ?? what about the m, n and j? is it still alive?
> > del a
>
> > --------------------------
> > In C/C++, the life time of m,n and j was the nearest block.  but
> > obviously, python doen't have this syntax, but I would like to know
> > that whether the life time of  m, n, j  is base on function range or
> > the object range.
>
> > We can not access the m, n, and j from the outside of class X. Now I'm
> > writing a program base on the wxpython. In the __init__ function of
> > wx.Panel, I use normal varable(just like the m,n and j) created some
> > widgets. It could be show in the window.  Does it indicated the life
> > time of varable m,n,j is base on the object range?
>
> Python has no variables. It has objects, which can be bound to names. Each
> binding to a name will increase a reference counter. Each unbinding will
> decrease it. so
>
> a = SomeObject()
> b = a
> del a
>
> will result in the SomeObject-instance still be alive. But when you add
>
> del b
>
> it will be garbage collected.
>
> Now in your example A() bound to k will not survive the exit of the method,
> as that means that k goes out of scope, and the object is bound to - the
> A-instance - gets its reference-counter decreased, resulting in it being
> freed.
>
> The wxwidgets example though is a different thing. If the panel stores a
> reference to the object, e.g. via a list (being part of a list or dict also
> increases the reference count), it will be kept around.
>
> Diez- Hide quoted text -
>
> - Show quoted text -
Yes, I see.  Many thanks for you !




More information about the Python-list mailing list