Вы можете отфильтровать все, что вам не нужно, из __dict__
:
def getAttributes(clazz):
return {name: attr for name, attr in clazz.__dict__.items()
if not name.startswith("__")
and not callable(attr)
and not type(attr) is staticmethod}
Редактировать : альтернатива, которая ведет себя немного по-другому для свойств класса и дескрипторов:
def getAttributes2(clazz):
attrs = {}
for name in vars(clazz):
if name.startswith("__"):
continue
attr = getattr(clazz, name)
if callable(attr):
continue
attrs[name] = attr
return attrs
(На практике это редко должно отличаться от первой версии.)