【python】如何在class内部定义一个装饰器?这里的坑你要么不知道,要么不会填!

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 ธ.ค. 2024

ความคิดเห็น • 29

  • @cken27
    @cken27 8 หลายเดือนก่อน +2

    對Class、Decorator還有各種method的理解又進一步了,非常感謝!

  • @kjc8751
    @kjc8751 8 หลายเดือนก่อน +2

    非常完整的舉例, 一掃之前的困惑。😀

    • @minkoder
      @minkoder  8 หลายเดือนก่อน

      感谢支持~

    • @charlottehong1276
      @charlottehong1276 6 หลายเดือนก่อน

      @@minkoder 看到打賞突然想到這高天是真高天還是搬運的高天

    • @minkoder
      @minkoder  6 หลายเดือนก่อน +1

      @@charlottehong1276 你可以看最近的几期视频,都是B站和TH-cam同时上的。或者看我之前本人出镜骂TH-cam的视频。另外TH-cam这边的视频是无水印的。

  • @louiscklaw
    @louiscklaw 3 หลายเดือนก่อน

    謝謝,很實用

  • @changliu7148
    @changliu7148 7 หลายเดือนก่อน

    讲得太清楚了,甚叼

    • @minkoder
      @minkoder  7 หลายเดือนก่อน

      感谢支持~

  • @賴泓瑋-e4z
    @賴泓瑋-e4z 8 หลายเดือนก่อน +1

    長知識了!!

  • @atussentinel
    @atussentinel 8 หลายเดือนก่อน +1

    还有更复杂的decorator带参数
    这个decorator里有两层def而不是常见的一层

  • @cy4002
    @cy4002 6 หลายเดือนก่อน

    想請教個問題,如果我的裝飾器就是必須用到self的某些method 或 attribute 我要怎麼把這個self 也一起放進去

    • @moneymaker02x
      @moneymaker02x 6 หลายเดือนก่อน

      有沒有更詳細的資訊或code,例如用到的attribute是動態或是靜態

    • @cy4002
      @cy4002 5 หลายเดือนก่อน

      @@moneymaker02x 實際有遇到的狀況是,我在寫 Qt 的介面,我期望寫一個裝飾器裝飾每一個元件的 callback ,只是簡單的 try catch,裝飾器如果有接到錯誤會把錯誤顯示在介面的某一個textbox 上,因此會需要在裝飾器內用到 self ,這個 self 是 Qt 的 Mainwindow

  • @FluffyNanachi
    @FluffyNanachi 8 หลายเดือนก่อน +6

    这种用法真的推荐使用吗😂,这也太过奇怪了吧,不过看完之后确实有了一种莫名的对python的理解

    • @mnKoTzRd
      @mnKoTzRd 8 หลายเดือนก่อน +1

      感觉没有什么推荐不推荐的说法吧,如果遇到这种使用场景,恰好有直接的解决方案就不需要一些“设计模式”了。

    • @kianmengkuak5485
      @kianmengkuak5485 8 หลายเดือนก่อน

      我推荐的是,非必要情况不要乱用,不然你后续可能出现一堆bug。
      但是当你使用class 时候里面的function 不需要任何的参数时,使用staticmethod会很适合,当你在superclass里面的function需要继承给其他subclass时候,且每个subclass需要进行各自的功能,可以使用classmethod,这样比如cls.name_list这些它会检测你使用的class是什么,并且运行对应的功能

    • @chen-shen-yi
      @chen-shen-yi 8 หลายเดือนก่อน +2

      其實並不奇怪,這個用法就是 function 原本的用法,用 instance.method 呼叫事實上是語法糖

    • @FluffyNanachi
      @FluffyNanachi 8 หลายเดือนก่อน +1

      @@chen-shen-yi 我感觉上的奇怪是在于,通常感觉上,函数定义、类定义的部分,有一种“不分先后顺序”的感觉,毕竟前面定义的函数可以调用后面定义的。但是这里直接在最后给函数套一层staticmethod,且在此之后就不能再在类里调用这个函数了。这让我感受到,其实函数的定义依然是分先后,就和正常的代码一样,这给我一种违反语感的感受,所以感到奇怪。

    • @王柏鈞-v1w
      @王柏鈞-v1w 8 หลายเดือนก่อน

      很好用的,例如你定義的方法,可以直接用decorated寫好測試或其他限制,到時候調用的時候就不用在這些方法裡面寫assert或其他isinstance,剩下的問題就是return的內容

  • @Yueyelongbob
    @Yueyelongbob 8 หลายเดือนก่อน

    staticmethod(log_function)(fib)(3)
    用的时候经常会想到js的()=>()=>()=>{ } lambda

  • @Xiaoming8787
    @Xiaoming8787 8 หลายเดือนก่อน +1

    卡threading教學

  • @Mingming_Studio
    @Mingming_Studio 8 หลายเดือนก่อน +1

    繞暈了,還是不會

  • @NoProblem76
    @NoProblem76 8 หลายเดือนก่อน

    写装饰器我比较喜欢class然后写__call__这种写法

  • @hermlite
    @hermlite 8 หลายเดือนก่อน

    😂巧了,项目有人这么写

  • @jacrywoo
    @jacrywoo 8 หลายเดือนก่อน

    所以 @staticmethod 这个装饰器就是为了让对象也能调用这个方法?从来都只通过类调用是不是就不一定需要 @staticmethod 了?