from cpl.core.property import classproperty class MyClass: _value = 42 @classproperty def value(cls): return cls._value @classproperty def name(cls): return cls.__name__ class Child(MyClass): _value = 99 def test_classproperty_on_class(): assert MyClass.value == 42 def test_classproperty_on_instance(): obj = MyClass() assert obj.value == 42 def test_classproperty_subclass_inherits_override(): assert Child.value == 99 def test_classproperty_returns_class_name(): assert MyClass.name == "MyClass" assert Child.name == "Child"