I'd like to automatically run some code upon class creation that can call other class methods. I have not found a way of doing so from within the class declaration itself and end up creating a @classmethod
called __clsinit__
and call it from the defining scope immediately after the class declaration. Is there a method I can define such that it will get automatically called after the class object is created?
Calling a class method upon creation of Python classes
Asked Answered
You can do this with a metaclass or a class decorator.
A class decorator (since 2.6) is probably easier to understand:
def call_clsinit(cls):
cls._clsinit()
return cls
@call_clsinit
class MyClass:
@classmethod
def _clsinit(cls):
print "MyClass._clsinit()"
Metaclasses are more powerful; they can call code and modify the ingredients of the class before it is created as well as afterwards (also, they can be inherited):
def call_clsinit(*args, **kwargs):
cls = type(*args, **kwargs)
cls._clsinit()
return cls;
class MyClass(object):
__metaclass__ = call_clsinit
@classmethod
def _clsinit(cls):
print "MyClass._clsinit()"
I'd add that at least from the text of the question, it's hard to tell why
__new__
or __init__
don't do the trick. –
Meaning Since Python 3.6 there is __init_subclass__
as defined in PEP 487.
© 2022 - 2024 — McMap. All rights reserved.
__special_methods__
. That's reserved for the Python language. Use a_single_underscore_prefix
if you want it to be private. – Onaonager