lundi 18 juillet 2016

Access the python class from method while defining it

I wanted to access the class on which method is to be defined. This can be used, for example, to create alias for methods with decorator. This particular case could be implemented without using decorator (alias = original_name), but I would like to use decorator, primarily so because the aliasing will be visible along side the method definition at the top, useful when the method definition is long.

def method_alias(*aliases):
    def aliased(m):
        class_of_m = ??? # GET class of this method
        for alias in aliases:
            setattr(class_of_m, alias, m)
        return m
    return aliased

class Test():
    @method_alias('check', 'examine')
    def test():
        print('I am implemented with name "test"')

Later, I found here that the above could be implemented by using two decorators (first store the aliases as method attributes, later when the class is already created, add the attributes to class). Can it be done without decorating the class, i.e. only decorating the method? This requires getting access to the class name in the decorator.





Aucun commentaire:

Enregistrer un commentaire