[Python-Dev] Submitting PEP 422 (Simple class initialization hook) for pronouncement

PJ Eby pje at telecommunity.com
Sun Feb 10 22:27:49 CET 2013


On Sun, Feb 10, 2013 at 7:32 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:
>    class Example:
>        @classmethod
>        def __init_class__(cls):

Is the @classmethod required?  What happens if it's not present?

Second, will type have a default __init_class__?  (IMO, it should,
otherwise it will be impossible to write co-operative __init_class__
functions.)

Only other comment is that the PEP could use a more concrete use case, e.g.:

    class Record:
        __fields = {}

        @classmethod
        def __init_class__(cls):
             cls.__fields = dict(cls.__fields)  # inherited fields
             cls.__fields.update({attr:val for attr, val in
cls.__dict__.iteritems() if isinstance(val, Field)})
             super().__init_class__()   # be co-operative

         # ...other methods that use the __fields attribute

    class SomeRecord(Record):
          foo = Field(int)
          bar = Field(str)

Putting something like this early on might help to demonstrate the
usefulness of the feature on its own merits, independent of the
porting issue, etc.  ;-)


More information about the Python-Dev mailing list