Python如何确定属性MR。

2024-09-29 20:23:25 发布

您现在位置:Python中文网/ 问答频道 /正文

通过访问对象的__mro__属性,我们可以很容易地确定对象的mro。在

在我的情况下,我有一个非常复杂的层次结构,我正在试图解开,以避免目前的mro地狱我们正在经历。在

我有一条很长的mro链,像这样:

(<class 'CompanyUserViewSet'>, <class 'CompanyGenericViewSet'>, 
 <class 'CompanyDispatchMixin'>, <class 'CompanyCorsLiteMixin'>, 
 <class 'CorsLiteMixin'>, <class 'ErrorHandlingMixin'>, ..., <type 'object'>)

为了问题的缘故,这是被缩短的,但是在本例中,它总结为19类。在

我目前有一个问题:我需要知道python从这些类中的哪一个来解析as_view方法。在

我知道我可以按顺序检查这些,但是我看不出我做错了什么,因为被调用的as_view不是正确的。在

对该方法的调用非常简单,我们有一个CompanyUserViewSet,Rest Framework正在使用它为路由器构建url:

^{pr2}$

给定一个对象和它的一个属性(或方法),python从哪个类解析它呢?在


Tags: 对象方法view属性层次结构as情况class
1条回答
网友
1楼 · 发布于 2024-09-29 20:23:25

要获取方法的定义位置,请使用method.__func__.__qualname__。这需要Python>;=3.3。在旧Python中,您可以使用qualname包。在

参见以下示例:

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__)

产生输出:

^{pr2}$

如果您使用的是qualname软件包:

^{3}$

相关问题 更多 >

    热门问题