簡體   English   中英

如何將 Python 時序裝飾器應用於 class 中的方法

[英]How to apply a Python timings decorator to a method within a class

我正在嘗試將此處描述的時序裝飾器應用於 class 中的方法,而不是獨立方法。 這應該怎么做?

我收到此錯誤:

TypeError: unbound method wrapper() must be called with SomeClass instance as
first argument (got float instance instead)

編輯

感謝您的評論,我想我知道問題所在。 這不起作用:

class A:

    @timings
    @classmethod
    def a(cls, x):
       print(x)

A.a(2)

正是因為你說的原因。 類型錯誤:必須使用 A 實例作為第一個參數調用未綁定的方法 wrapper()(改為獲取 int 實例)

但這確實:

class A:

    @classmethod
    @timings
    def a(cls, x):
        print(x)

A.a(2)

所以順序很重要。 我認為這里發生的事情是它欺騙了 python 處理綁定方法的方式:當 python 看着成員 a 時,它必須做出決定:

  1. 做一個綁定方法
  2. 制作一個 class 方法
  3. 什么都不做(保持原樣)

如果它得到一個常規的 function,它將執行 (1),並且@timings 生成一個常規的 function。

這能解決問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM