code: def classproperty(func):
    
    doc = func.__doc__
  
    if not isinstance(func, (classmethod, staticmethod)):
      func = classmethod(func)
  
    return ClassPropertyDescriptor(func, doc)
docs: Use as a decorator on a method definition to make it a class-level attribute.
  
    This decorator can be applied to a method, a classmethod, or a staticmethod. This decorator will
    bind the first argument to the class object.
  
    Usage:
    >>> class Foo(object):
    ...   @classproperty
    ...   def name(cls):
    ...     return cls.__name__
    ...
    >>> Foo.name
    'Foo'
  
    Setting or deleting the attribute of this name will overwrite this property.
  
    The docstring of the classproperty `x` for a class `C` can be obtained by
    `C.__dict__['x'].__doc__`.