py_method_types.py

#! /usr/bin/python3
# ===================================================================
# Method Types in Python OOP
# www.youytube.con/watch?v=PNp7cFJGsM
# ===================================================================

class MyClass:


    # ---- can modify object instance state
    # ---- can modify class state

    def method(self):
        return('instance method called, {}'.format(self))


    # ---- Can't modify object instance state
    # ---- can modify class state

    @classmethod               # decorator
    def classmethod(cls):
        return('class method called, {}'.format(cls))


    # ---- can't modify object instance state
    # ---- Can't modify class state 
    # ---- way to namespace methods 

    @staticmethod               # decorator
    def staticmethod():
        return('static method called')


if __name__ == '__main__':

    obj = MyClass()

    x = obj.method()
    print(x)

    x = obj.classmethod()
    print(x)

    x = obj.staticmethod()
    print(x)

    x = MyClass.classmethod()
    print(x)

    x = MyClass.staticmethod()
    print(x)