def order_attributes(attrs):
constants = {}
functions = {}
classes = {}
for key, value in attrs.items():
if isinstance(value, type(int.real)) or key in ("__abstractmethods__", "__base__", "__bases__", "__class__", "__dict__", "__dictoffset__", "__file__", "__flags__", "__itemsize__", "__module__", "__name__", "__package__", "__subclasses__", "__weakrefoffset__"):
pass
elif isinstance(value, (type, types.ClassType)):
classes[key] = value
elif isinstance(value, (types.FunctionType, types.BuiltinFunctionType, type(list.append), type(object.__init__), classmethod, staticmethod)):
if not (key.startswith("__") and key.endswith("__")):
functions[key] = value
else:
constants[key] = value
constants = sorted_mapping(constants)
functions = sorted_mapping(functions)
classes = sorted_mapping(classes)
classes_reverse = collections.OrderedDict((v, k) for k, v in classes.items())
classes_ordered = collections.OrderedDict((classes_reverse[cls], cls) for cls in order_classes(classes.values()))
return collections.OrderedDict(constants.items() + functions.items() + classes_ordered.items())
评论列表
文章目录