【问题标题】:Given a Python method, how to get its class?给定一个 Python 方法,如何获取它的类?
【发布时间】:2021-04-13 19:59:07
【问题描述】:

假设我有这个类:

class Foo():
    def foo_method(self):
        pass

现在假设我有一个对象foo = Foo()。 我可以将foo.foo_method 作为参数传递给函数。 foo.foo_method.__qualname__ 返回表示方法“全名”的字符串: "Foo.foo_method"如果我想从foo.foo_method 获取Foo 类本身怎么办?

我想出的解决办法是:

def method_class(method):
    return eval(method.__qualname__.split(".")[0])

有没有更“肮脏”的方式来实现这一点?

【问题讨论】:

  • 也许 dir(foo)help(foo) 打印其中一个并尝试
  • 你看过__self__foo_method吗?

标签: python oop methods


【解决方案1】:

绑定方法绑定到的实例存储为__self__ 属性。因此:

class Foo:
    def foo_method(self):
        pass

foo = Foo()
assert foo.foo_method.__self__.__class__ is Foo

【讨论】:

    【解决方案2】:

    以下内容可能会满足您的需求:

        ##########################################################
        class Klassy:
            def methy(arg):
                pass
            
        insty = Klassy()
        
        funky = insty.methy
        
        ##########################################################
        
        insty_jr = funky.__self__        
                
        Klassy_jr = type(insty_jr)
        
        print(Klassy_jr)
    

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2022-08-17
      • 1970-01-01
      • 2014-11-13
      • 2011-08-20
      • 2019-11-07
      • 2011-10-26
      • 2017-08-08
      • 2023-04-01
      相关资源
      最近更新 更多