"parent" in a class __init__ def?
bruno at modulix
onurb at xiludom.gro
Tue Jun 13 10:55:19 CEST 2006
akameswaran at gmail.com wrote:
> bruno at modulix wrote:
>>akameswaran at gmail.com wrote:
>>> Intuitively, the name lookup on
>>>self.parent.foo would be faster than if you passed in the object in
>>Each dot means doing a lookup in a namespace. The more dots, the more
>>lookups. And lookups do have a cost.
> hmm, intuition may not be right in this case.
> Lookups do have a cost - now I"m almost tempted to write and run a test
> for this - but the cost of each lookup is also relative to the current
A common "optimization" trick is to 'localize' references before a heavy
loop, to avoid lookup cost, ie:
def method(self, *args):
dothis = self.dothis
dothat = somemodule.somefunc
CONST = othermodule.CONST
# heavy processing loop here
> I haven't looked over the implementation of the python
> interpreter - but I would hope the lookup on self would be optimized
> and trivial.
It's certainly not trivial. Must take into account instance attributes
(in __dict__ or __slots__), class attributes, inherited attributes,
overriding descriptors, non-overriding descriptors, __getattr__, etc...
The incredible felxibility of Python's object model comes with a cost.
> The next relevant question would be is it cheaper to
> lookup self.parent or to look up a method variable,
The second - cf above.
> which I supsect
> would depend on the number of names in self vs. number of names in the
Namespaces are mostly built upon hashtables, so the number of names
should be mostly irrelevant.
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb at xiludom.gro'.split('@')])"
More information about the Python-list