通过访问对象的__mro__属性,我们可以轻松地确定对象的mro。
在我的例子中,我有一个非常复杂的层次结构,为了避免我们正在经历的mro地狱,我试图解开它。
我有一条很长的mro链,像这条:
(<class 'CompanyUserViewSet'>, <class 'CompanyGenericViewSet'>,
<class 'CompanyDispatchMixin'>, <class 'CompanyCorsLiteMixin'>,
<class 'CorsLiteMixin'>, <class 'ErrorHandlingMixin'>, ..., <type 'object'>)这是为了这个问题而缩短的,但在本例中,它总结为19类。
目前我遇到了一个问题:我需要知道python从哪个类中解决了as_view方法。
我知道我可以按顺序检查这些内容,但是我看不出我做错了什么,因为正在被调用的as_view不是正确的。
对该方法的调用非常简单,我们有一个Rest用来为路由器构建urls的CompanyUserViewSet:
view = viewset.as_view(mapping, **route.initkwargs)如何确定,给定一个对象及其属性(或方法),从哪个类解析它?
发布于 2015-10-15 17:16:26
要获得定义方法的位置,请使用method.__func__.__qualname__。这需要PythonJava3.3。在较老的蟒蛇中,您可以使用质名包。
见下面的例子:
class A:
def f1():
return 'f1A'
def f2():
return 'f2A'
class B(A):
def f2():
return 'f2B'
a = A()
b = B()
print(a.f1.__func__.__qualname__)
print(a.f2.__func__.__qualname__)
print(b.f1.__func__.__qualname__)
print(b.f2.__func__.__qualname__)它产生的输出:
A.f1
A.f2
A.f1
B.f2如果您使用的是质量名称包:
import qualname
print qualname.qualname(a.f1)
print qualname.qualname(a.f2)
print qualname.qualname(b.f1)
print qualname.qualname(b.f2)https://stackoverflow.com/questions/33154429
复制相似问题