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