[Python-ideas] JavaScript-Style Object Creation in Python (using a constructor function instead of a class to create objects)

Steven D'Aprano steve at pearwood.info
Sun May 14 07:48:52 EDT 2017


On Sun, May 14, 2017 at 01:33:32PM +0200, Antoine Rozo wrote:
> Also, how do you handle special methods for operators, such as __add__?

Oh, that's a good point! I forgot about that.

For implementation-dependent reasons, you couldn't use this proposed new 
syntax for dunder methods:

def MyClass():
    self = subclass(Parent)

    def my_method(arg):
       ...
    self.my_method = my_method

    def __str__():
        ...
    self.__str__ = __str__

    return self

obj = MyClass()
obj.my_method(123)  # okay
obj.__str__()  # works, but bad style
str(obj)  # doesn't work in CPython

Because of the implementation, str(obj) would NOT call __str__ in 
CPython, although I think it would in IronPython. I'm not sure about 
PyPy or Jython.


(CPython "new style classes" only call __dunder__ methods when they are 
defined on the class, or a superclass, not when they are in the instance 
__dict__.)
    


-- 
Steve


More information about the Python-ideas mailing list