how @classmethod and @property works how to call in python shell for debugging (import pdb;pdb.set_trace()) what are best-practises for writing classes that makes for better and flexible sub-classes how __get__ works Learnt: 1. Can define class functions and class properties (getter/setter) using metaclass. IMP (Have to try): import inspect class meta(type): def __new__(cls, name, base, clsdict): temp_cls = type.__new__(cls, name, base, clsdict) methods=inspect.getmembers(temp_cls,inspect.ismethod) for method in methods: print inspect.getargspec(method[1]) class A(Object): __metaclass__=meta @doit(what_to_do) def abc(): pass def doit(what_to_do, main_func): def abc(what_to_do=what_to_do,main_func=main_func): pass return "pass" function containing both params (and a special param to indicate doit-processed func)\ with default values set (default values are themself func). What meta does -> Identify funcs processed with doit and return main_func after invoking what_to_do