def _write_class(clss, lines, inc = 0, assumed_globals=None, implicit_globals=None,
assumed_typevars=None):
_print("write class: "+str(clss))
anyElement = False
lines.append(inc*indent+typelogger._signature_class(clss,
assumed_globals, implicit_globals, assumed_typevars))
mb = inspect.getmembers(clss, lambda t: inspect.isclass(t) or type_util._check_as_func(t))
# todo: Care for overload-decorator
for elem in mb:
if elem[0] in clss.__dict__:
el = clss.__dict__[elem[0]]
if inspect.isfunction(el):
lines.append('')
_write_func(el, lines, inc+1, slf_or_clsm=True,
assumed_globals=assumed_globals)
anyElement = True
elif inspect.isclass(el):
lines.append('')
if isinstance(el, TypeVar):
_write_TypeVar(el, lines, inc+1)
else:
_write_class(el, lines, inc+1, assumed_globals, implicit_globals,
assumed_typevars)
anyElement = True
elif inspect.ismethoddescriptor(el) and type(el) is staticmethod:
lines.append('')
_write_func(el.__func__, lines, inc+1, ['staticmethod'],
assumed_globals=assumed_globals)
anyElement = True
elif isinstance(el, property):
lines.append('')
_write_property(el, lines, inc+1, assumed_globals=assumed_globals)
anyElement = True
# classmethods are not obtained via inspect.getmembers.
# We have to look into __dict__ for that.
for key in clss.__dict__:
attr = getattr(clss, key)
if util.is_classmethod(attr):
lines.append('')
_write_func(attr, lines, inc+1, ['classmethod'], True, assumed_globals)
anyElement = True
if not anyElement:
lines.append((inc+1)*indent+'pass')
评论列表
文章目录