Promoting Python
Marko Rauhamaa
marko at pacujo.net
Wed Apr 6 18:03:34 EDT 2016
Ian Kelly <ian.g.kelly at gmail.com>:
> On Wed, Apr 6, 2016 at 2:39 PM, Marko Rauhamaa <marko at pacujo.net> wrote:
>> Not convinced. Probably just an oversight.
>
> It's documented here:
> https://docs.python.org/3/reference/datamodel.html#special-method-lookup
Ok, not an oversight but some inherent trouble with the way object
methods are related with their prototypes in the class. An unexpected
deficiency in the object-class relationship of sorts.
> The minidom implementation is probably just calling
> filelike.write('blah'). That will succeed in calling either a method
> or a function-in-an-attribute. Note that the write function you
> defined in this example has no self argument. This points to the fact
> that it's not truly a method.
No true Scotsman, there?
Once you look up an object method, it doesn't have a self argument. The
self argument is cooked up for the benefit of the function definition in
the class.
IOW, if I have this class:
class A:
def f(self):
print("f")
and this object:
a = A()
then,
a.f
is a function that doesn't have a self argument. That function is
generated on the fly, and it delegates to A.f, providing it with self
argument.
However, a.f itself is just a function that doesn't accept any
arguments.
Defining:
def f():
print("f")
a.f = f
simply short-circuits the attribute lookup process; no need to consult
the class when the attribute (method!) is right there in the object's
dict.
Marko
More information about the Python-list
mailing list