Getters and Setters
Markus Stenberg
mstenber at cc.Helsinki.FI
Sun Jul 18 15:42:34 EDT 1999
tim_one at email.msn.com writes:
> [Bernhard Herzog <herzog at online.de]
> > The cycle doesn't involve self, but self's dict will hold an
> > indirect reference to itself. The instance object will be
> > deleted, so it's __del__ method is called, but its __dict__
> > won't be deleted:
>
> Ah -- got it. Thanks for the explanation. self.__del__ is called,
> though, so the cycles are easy to break:
>
> def __del__(self):
> self.__dict__.clear()
That's only painful if other classes define __del__ too while using this as
mixin.. (lazily yours ;>)
> even-tested-it-this-time<wink>-ly y'rs - tim
Just to contrib something to the discussion.. (note that test period wasn't
extensive, but I doubt it'd vary much)
normal get : 127539.1651/sec [0.24s] (7.8407us/call) (foo.x)
normal set : 101784.9252/sec [0.29s] (9.8246us/call) (foo.x=0)
normal getattr: 118375.8787/sec [0.25s] (8.4477us/call) (getattr(foo,'x'))
normal setattr: 110274.2723/sec [0.27s] (9.0683us/call) (setattr(foo,'x',1))
FastGet : 75519.0025/sec [0.40s] (13.242us/call) (instance method wrapper)
FastSet : 64276.5807/sec [0.47s] (15.558us/call)
SlowGet : 43534.9160/sec [0.69s] (22.970us/call) (class method wrapper)
SlowSet : 38138.5309/sec [0.79s] (26.220us/call)
Obviously, the first call is slow, but beyond that, it seems reasonable
enough - I might even use it, one of these days, in my programs ;-)
-Markus
--
"If you want to travel around the world and be invited to speak at
a lot of different places, just write a Unix operating system."
-- Linus Torvalds
More information about the Python-list
mailing list