Python 获取在方法中定义方法的类
如何获取在Python中定义方法的类 比如说Python 获取在方法中定义方法的类,python,python-2.7,python-datamodel,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 cl
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.uuu class_uuuu始终是b的实际类(即b),我想要的是实际定义方法的类(应该是A),因此self.uuu class_uuu毫无用处。要返回定义方法的类,最简单的方法是直接执行:
class A(object):
def meth(self):
return A
如果
meth
是在类之外定义的,并且可能附加到多个类,那么在meth
的主体中硬编码该类可能是不可行的。在这种情况下,meth
了解定义它的类的最简单(唯一?)方法是在将该信息附加到类时将其存储在meth
(作为属性)中
而不是将函数meth
附加到带有
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'>
这是一件有点奇怪的事情,你要想做到这一点,就必须非常刻薄。一种可能的解决方案是认识到一个方法是定义它的类上的
\uuuuu dict\uuuu
的成员,因此您可以提升MRO以查找该dict中具有方法名称的第一个方法:
def get_class_for_method(self, method_name):
for cls in self.__class__.mro():
if method_name in cls.__dict__:
return cls
在yjmade的例子中,
self.\uuu class\uuuu.mro()
在A
之前包含B
,因此B.meth
将在A.meth
之前找到。不幸的是,我认为这是行不通的……是的,@ubuntu是对的,我需要知道在我的例子中,哪个类的方法调用get_current_class函数,我不能简单地键入这个类名,因为我正在实现一个函数,它需要使用调用它的方法的类,我不想每次都把这个类放在参数中;我不太明白你的意思。你是说函数是在类之外定义的吗?你能发布更多的代码让情况更清楚吗?@ubuntu是的,这个函数(get_current_类)是在A.meth外部定义的,它可以在A.meth内部返回A,在PEP3130中,“类”正是我想要的,不幸的是,它被拒绝了可能的重复