2

如何获取在 Python 中定义方法的类?

例如

class A(object):
    def meth(self):
        return **get_current_class()**
class B(A):
    def meth(self):
        do_something
        return super(B,self).meth()

>>> b=B()
>>> b.meth() ##that return the class A

由于b.__class__始终是b的实际类(即B),而我想要的是实际定义方法的类(应该是A),所以self.__class__没用。

4

2 回答 2

0

要返回定义该方法的类,最简单的方法是直接执行:

class A(object):
    def meth(self):
        return A

如果meth在类之外定义——并且可能附加到多个类——在meth. meth在这种情况下,了解定义它的类的最简单(唯一?)方法可能是meth在附加到类时将该信息存储在(作为属性)中。

而不是将函数附加到methA

A.meth = meth

我建议使用setmeth同时执行A.meth = meth meth.thisclass = A的函数:

def setmeth(cls, name, meth):
    setattr(cls, name, meth)
    setattr(meth, 'thisclass', cls)

def meth(self):
    print(meth.thisclass)

class A(object): pass
setmeth(A, 'meth', meth)

class B(A):
    def meth(self):
        return super(B, self).meth()

b=B()
b.meth() ##that return the class A

印刷

<class '__main__.A'>
于 2013-09-26T12:35:31.833 回答
0

想要做这件事有点奇怪,而且如果不变得非常hacky,您就无法做到。一种可能的解决方案是意识到方法是__dict__定义它的类的成员,因此您可以提升 MRO 以找到第一个在该字典中具有方法名称的方法:

def get_class_for_method(self, method_name):
    for cls in self.__class__.mro():
        if method_name in cls.__dict__:
            return cls
于 2013-09-26T12:47:47.773 回答