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__,实例就不能做为弱引用的目标.
相关文章
相关标签/搜索