开发者社区> 问答> 正文

如何从类方法获取类名称?

请检查以下简单代码:

def extract_class_from_func(func_var):
    # should return class of the func_var
    return ...

class A:
     def m(self):
         print(self, "m")

func_var = A.m

# This check should succeed
assert A == extract_class_from_func(func_var)

请帮助我实现方法extract_class_from_func

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 10:03:29 301 0
1 条回答
写回答
取消 提交回答
  • 你不能 在Python 2中,此引用可从Amim_class获得。但是,引用PEP 3155-类和函数的合格名称:

    这种可能性在Python 3中已经消失了。

    不再存在“未绑定方法”之类的东西,并且函数“ Am”与常规函数没有什么不同-它不包含对类对象的任何引用。实际上,您甚至可以删除该类并看到“方法”仍然有效:

    >>> class Ameta(type):
    ...     def __del__(self):
    ...         print("goodbye A")
    ... 
    >>> class A(metaclass=Ameta):
    ...     def m(self):
    ...         print(self, "m")
    ... 
    >>> f = A.m
    >>> import gc
    >>> del A
    >>> gc.collect()
    goodbye A
    6
    >>> f("")
     m
    

    但是,PEP确实为您想要的内容提供了有限的支持:如果您查看“ Am qualname ”,您将找到一个字符串,可以从该字符串内省一下类A。

    回答来源:stackoverflow

    2020-03-24 10:03:37
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载