test.py
class A:
def a(self):
pass
@staticmethod
def b():
pass
@classmethod
def c(cls):
pass
@property
def d(self):
return 1
e = 1
def f():
pass
test2.py
import inspect
import os
from importlib.util import spec_from_file_location, module_from_spec
script_path = "test.py"
def get_members_from_file(file_path: str, name="module"):
if os.path.exists(file_path):
spec = spec_from_file_location(name, file_path)
module = module_from_spec(spec)
spec.loader.exec_module(module)
members = inspect.getmembers(module, lambda member: not inspect.ismodule(member))
members_list = []
for name, value in members:
if not name.startswith('_'):
info = {"name": name, "value": value}
if inspect.isclass(value):
info["type"] = "class"
class_members = []
for k, v in vars(value).items():
if not k.startswith("_"):
class_member_info = {"name": k, "value": v, "type": v.__class__.__name__}
class_members.append(class_member_info)
info["class_members"] = class_members
else:
info["type"] = value.__class__.__name__
members_list.append(info)
return members_list
else:
raise Exception(f"file_path={file_path} not exist")
print(get_members_from_file(script_path))