classmethod&staticmethod 以及 __slots__

  • 什麼是python中的classmethod,它的用途是什麼?python

    • classmethod裝飾器對應的函數不須要實例化,不須要 self 參數,但第一個參數須要是表示自身類的 cls 參數,能夠來調用類的屬性,類的方法,實例化對象等。函數

      class Demo:
          @classmethod
          def klassmeth(*args):
              return args
          """
          Usage::
          >>>Demo.klassmeth()
          >>> (<class '__main__.Demo'>, 'span')
          """
    • klasssmeth 返回所有位置參數
    • 無論怎麼樣調用Demo.klassmenth,它的第一個參數始終是Demo類.
  • 什麼是python中的staticmethod,它的用途是什麼?spa

    • staticmethod是一個將類中的方法靜態化,無需實例即可調用.code

      #!/usr/bin/python
      # -*- coding: UTF-8 -*-
      
      class C(object):
      @staticmethod
      def f():
          print('runoob');
      
      C.f();          # 靜態方法無需實例化
      cobj = C()
      cobj.f()        # 也能夠實例化後調用
  • __slots__用於什麼地方?對象

    • 首先咱們要明白一個概念.默認狀況下Python在各個實例中名爲__dict__的字典裏存儲的實力屬性,爲了是底層的散列表提高訪問速度,字典會消耗大量內存.
    • 經過__slots__類屬性,能節省大量內存.方法事讓解釋器在元組中存儲屬性,而不是字典.
    • 繼承自超類__slots__屬性沒有效果,Python只會使用各個類中定義的__slots__屬性.
    • 定義__slots__屬性以後,實例不能再有__slots__中所列名稱以外的其餘屬性.
    • 若是把__dict__這個名稱添加到__slots__中,是一個糟糕的選擇.
    • 若是不把__weakref__加入__slots__,實例就不能做爲弱引用的目標.
相關文章
相關標籤/搜索