To illustrate the question check the following code:
class MyDescriptor(object):
def __get__(self, obj, type=None):
print \"get\", self, obj, type
You should read this and this.
It overwrites the function because you didn't overload the __set__
and __get__
functions of SomeClass but of MyDescriptor class. Maybe you wanted for SomeClass to inherit MyDescriptor? SomeClass1 prints the "get" and "set" output because it's a static method AFAIK. For details read the upper links.