Promoting Python

Marko Rauhamaa marko at pacujo.net
Wed Apr 6 16:39:01 EDT 2016


Ian Kelly <ian.g.kelly at gmail.com>:

> On Wed, Apr 6, 2016 at 1:59 PM, Marko Rauhamaa <marko at pacujo.net> wrote:
>> It seems to me CPython is being a bit too picky here. Why should it
>> care if the method is a class method or an object method?
>
> Because the purpose of a class is to define the behavior of its
> instances. A function stored in an object attribute technically isn't
> a method at all. It's just a function that happens to be stored in an
> object attribute, i.e. *data*. Why should the behavior of a
> SimpleNamespace change just because somebody decided they wanted to
> store something under the name "__iter__" (or worse,
> "__getattribute__")?
>
> Also, because not having to check the instance dict for the presence
> of dunder methods is faster.

Not convinced. Probably just an oversight.

For example, file-like objects have no such reservations:

    import sys
    import types
    import xml.dom.minidom

    filelike = types.SimpleNamespace()
    def write(s):
        for c in s:
            sys.stdout.write("{{{}}}".format(c))
    filelike.write = write
    filelike.close = lambda: None
    doc = xml.dom.minidom.getDOMImplementation().createDocument(
        None, "tag", None).writexml(filelike)
    sys.stdout.write("\n")



Marko



More information about the Python-list mailing list