On 15/05/2015 23:44, Marko Rauhamaa wrote:
BartC <b...@freeuk.com>:

What /is/ a method lookup? Is it when you have this:

  A.B()

and need to find whether the expression A (or its class or type) has a
name B associated with it? (And it then needs to check whether B is
something that can be called.)

If so, does that have to be done using Python's Dict mechanism? (Ie.
searching for a key 'B' by name and seeing if the object associated
with it is a method. That does not sound efficient.)

That is a general feature among high-level programming languages. In
Python, it is even more complicated:

  * first the object's dict is looked up for the method name

  * if the method is not found (it usually isn't), the dict of the
    object's class is consulted

  * if the method is found (it usually is), a function object is
    instantiated that delegates to the class's method and embeds a "self"
    reference to the object to the call

IOW, two dict lookups plus an object construction for each method call.

OK, I didn't know that objects have their own set of attributes that are distinct from the class they belong to. I really ought to learn more Python!.

(Yet, I have this crazy urge now to create my own bytecode interpreter for, if not exactly Python itself, then an equivalent language. Just to see if I can do any better than CPython, given the same language restraints.

Although I'm hampered a little by not knowing Python well enough. Nor OOP, but those are minor details... Anyway it sounds more fun than trying to decipher the layers of macros and conditional code that appear to be the CPython sources.)

> IOW, two dict lookups plus an object construction for each method call.

I suppose in many cases an object will have no attributes of its own, and so it can rapidly bypass the first lookup. I don't understand the need for an object creation (to represent A.B so that it can call it?) but perhaps such an object can already exist, prepared ready for use.

--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to