Assigning the module's __class__ means you can otherwise initialize your module instance normally--all your class needs to do is declare your properties or magic methods. If you overwrite the sys.modules entry for your module with a new instance of a custom subclass, all your module initialization needs to be done within--or propagated to--the new class or instance.


//arry/

On 09/08/2017 01:45 PM, Ethan Furman wrote:
On 09/08/2017 12:44 PM, Larry Hastings wrote:

I've updated PEP 549 with a new title--"Instance Descriptors" is a better name than "Instance Properties"--and to clarify my rationale for the PEP. I've also updated the prototype with code cleanups and a new type: "collections.abc.InstanceDescriptor", a base class that allows user classes to be instance descriptors.

I like the new title, I'm +0 on the PEP itself, and I have one correction for the PEP: we've had the ability to simulate module properties for ages:

    Python 2.7.6 (default, Oct 26 2016, 20:32:47)
    [GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
    --> import module_class
    --> module_class.hello
    'hello'
    --> module_class.hello = 'hola'
    --> module_class.hello
    'hola'

And the code:

    class ModuleClass(object):
        @property
        def hello(self):
            try:
                return self._greeting
            except AttributeError:
                return 'hello'
        @hello.setter
        def hello(self, value):
            self._greeting = value

    import sys
    sys.modules[__name__] = ModuleClass()

I will admit I don't see what reassigning the __class__ attribute on a module did for us.

--
~Ethan~
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: https://mail.python.org/mailman/options/python-dev/larry%40hastings.org

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to