首页 > 解决方案 > 如何从 Python 中的方法中获取类?

问题描述

当我们将给定方法作为参数传递时,我正在尝试编写一个获取类的函数。

例如,如果我们有

class Hello:
    NAME = "HELLO TOTO"

    def method(self) -> int:
        return 5

    @classmethod
    def cls_method(cls) -> str:
        return "Hi"


class Bonjour(Hello):
    NOM = "BONJOUR TOTO"

    def new_method(self) -> int:
        return 0

我会得到:

我在 SO 上进行了搜索,但找不到对我的问题的任何直接答案。

我怎么能实现这样的功能(如果重要的话,在 Python 3.6+ 中)?

谢谢

标签: pythonpython-3.xmethodsinspect

解决方案


我相信没有万无一失的方法,但这适用于大多数情况:

def get_class_of_bound_self(f):
    assert hasattr(f, '__self__')
    return f.__self__ if isinstance(f.__self__, type) else type(f.__self__)

f请注意,如果是元类的方法,这将崩溃M;它会返回M而不是type.


推荐阅读