您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python:如何从“框架”对象中检索类信息?

Python:如何从“框架”对象中检索类信息?

我不相信,在框架对象级别上,没有任何方法可以找到已被调用的实际python函数对象。

但是,如果您的代码依赖于通用约定:命名方法的instance参数self,则可以执行以下操作:

def get_class_from_frame(fr):
  import inspect
  args, _, _, value_dict = inspect.getargvalues(fr)
  # we check the first parameter for the frame function is
  # named 'self'
  if len(args) and args[0] == 'self':
    # in that case, 'self' will be referenced in value_dict
    instance = value_dict.get('self', None)
    if instance:
      # return its class
      return getattr(instance, '__class__', None)
  # return None otherwise
  return None

如果您不想使用@L_404_0@,则可以直接使用frame.f_locals代替value_dictframe.f_code.co_varnames[:frame.f_code.co_argcount]代替args

请记住,这仍然仅依靠约定,因此它不是可移植的,并且容易出错:

根据您要确切执行的操作,您可能需要花一些时间来更深入地了解所有这些问题的解决方法(可以检查返回的类中是否存在frame函数并共享相同的源,可以检测到描述符调用,对于类方法,等等。)

python 2022/1/1 18:46:10 有326人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶