def METHOD_NAME(ext_class: ExtClass) -> ExtClass:
    assert_true(inspect.isclass(ext_class),
                message='the extend() decorator can'
                        ' be used with classes only')
    def _get_property(base: Base):
        ext = getattr(base, _name, None)
        if ext is None:
            with lock:
                ext = getattr(base, _name, None)
                if ext is None:
                    ext = ext_class(base,
                                    *(ext_args or ()),
                                    **(ext_kwargs or {}))
                    setattr(base, _name, ext)
                    call_handler(base, inst_handler, ext)
        return ext
    assert_true(not hasattr(base_class, name),
                message=f'a property named {name} already'
                        f' exists in class {base_class.__name__}')
    setattr(base_class,
            name,
            property(_get_property, None, None,
                     ext_class.__doc__ if doc is None else doc))
    call_handler(base_class, class_handler, ext_class)
    return ext_class