I'm using a decorator to automatically add serializability to my Python classes. Now I'm wondering, if I could also set a property to the class I want to decorate inside the decorator.
def serialize(clazz):
def inner(actual_class_type):
actual_init = actual_class_type.__init__
def new_init(self, *args, **kwargs):
cool_thing = clazz()
# do stuff
actual_init(self, *args, **kwargs)
actual_class_type.__init__ = new_init
return actual_class_type
return inner
Use setattr(actual_class_type, attribute_name, default_value)
.
See the example here: How can I add properties to a class using a decorator that takes a list of names as argument?
def serialize(clazz):
def inner(actual_class_type):
actual_init = actual_class_type.__init__
def new_init(self, *args, **kwargs):
cool_thing = clazz()
# do stuff
actual_init(self, *args, **kwargs)
actual_class_type.__init__ = new_init
prop_name = "my_prop"
def getAttr(self):
return getattr(self, "_" + prop_name)
def setAttr(self, value):
setattr(self, "_" + prop_name, value)
prop = property(getAttr, setAttr)
setattr(cls, prop_name, prop)
setattr(cls, "_" + prop_name, None) # Default value for that property
return actual_class_type
return inner