获取在方法内定义方法的类

时间:2013-09-26 12:32:19

标签: python python-2.7 python-datamodel

如何获得在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__没用。

2 个答案:

答案 0 :(得分:0)

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

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

如果meth在课外定义 - 并且可能附加到多个课程 - 则在meth的正文中对该课进行硬编码可能是不可行的。在这种情况下,meth知道定义它的类的最简单(唯一?)方式可能是在附加到meth(作为属性)时将该信息存储在meth中上课。

而不是使用

将函数A附加到类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'>

打印

{{1}}

答案 1 :(得分: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