97 def __new__(cls, name, bases, namespace, **kwds):
98 props = {
99 key: namespace[key]
100 for key in namespace
101 if isinstance(namespace[key], Property)
102 }
103 if props:
104 doc = namespace.get("__doc__", "").rstrip()
105 doc += "\n\nProperties\n----------\n"
106 doc += "\n".join(
107 [
108 f"- {name}: {p.cpp_type} ({p.default!r})\n {p.__doc__}\n"
109 for name, p in props.items()
110 ]
111 )
112 namespace["__doc__"] = doc
113 namespace["_descriptors"] = props
114 slots = set(namespace.get("__slots__", []))
115 slots.update(["_properties", "_name"])
116 namespace["__slots__"] = tuple(slots)
117 result = type.__new__(cls, name, bases, namespace)
118 return result
119
120