There is an answered question about `classmethod` and `property` combined together: [Using property() on classmethods](https://stackoverflow.com/questions/128573/using-property-on-classmethods)

I still don't understand the cause of the problem, please help.

My understanding of `classmethod` was that it simply replaces `self` with `cls`. With this in mind I wrote several classmethods during the past few years and now I see I was wrong all that time.

So what is the difference between `@classmethod` and `@cm` from the code below?

```
def cm(func):
    def decorated(self, *args, **kwargs):
        return func(self.__class__, *args, **kwargs)
    return decorated

class C:
    V = 0 

    @property
    @classmethod
    def inc1(cls):
        cls.V += 1
        print("V1 =", cls.V)

    @property
    @cm 
    def inc3(cls):
        cls.V += 3
        print("V3 =", cls.V)

c = C() 
#c.inc1  # fails with:  TypeError: 'classmethod' object is not callable
c.inc3   # works

```

`inc3` with `cm` works, but `inc1` with `classmethod` does not.