Python对象属性进阶学习笔记

  发布日期:   2017-08-16
  最新修改:   2020-02-16
  阅读次数:   57 次
  • 更多分享:http://www.catbro.cn

  • 我们在前面了解过访问器,访问器是一个简单的方法,它能够使用getXXX和setXXX这样的名字来得到或者重绑定一些特性。

  • 使用访问器的场景一般是:在访问给定的特性时需要执行一些代码

@property装饰器(demo例子,创建一个矩形类)

  • 实例代码:
    class Rectangle:
        def __init__(self):
            self.width = 0;
            self.height = 0;
        def setSize(self,size):
            self.width,self.height = size;
        def getSize(self):
            return self.width,self.height
  • 调用:

      r = Rectangle();
      print(r.getSize())
      r.setSize((2,3))
      print(r.getSize())
  • 输出:

      (0, 0)
      (2, 3)
  • 当然,我们也可以使用新特性来处理该需求

  • 主角是@property注解

      class Rectangle:
          def __init__(self):
              print('init be called')
              self.width = 0;
              self.height = 0;
          @property
        def size(self):
              return self.size;
           @size.setter
        def size(self,size):
              print('setSize be called')
              self.width,self.height = size;
          @size.getter
        def size(self):
              print('getSize be called')
              return self.width,self.height
          @size.deleter
        def size(self):
              print('delete be called')
  • 调用:

      r = Rectangle();
      r.size =1,2
      print(r.size);
      del r.size;
  • 输出:

      init be called
      setSize be called
      getSize be called
      (1, 2)
      delete be called
  • 可以看到,我额外加了个delete,通过del语句删除size就会调用,其实property提供了四个参数,分别为: 1、fget:设置访问器 2、fset:设置设计器 3、fdel:设置删除器 4、doc:返回说明文档

  • 如果我们四个参数都没有相应的设置,该属性就是不可读,不可写

  • @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。

  • 所以小伙伴们在定义类的时候可以优先考虑@property哦。

静态方法和类成员方法@staticmethod和 @classmethod

  • 实例代码:
    class MyClass:
        @staticmethod
      def method1():
            print('this is static method');

        @classmethod
      def method2(cls):
            print('this is class method of ',cls);
  • 调用如下:
    MyClass.method1();
    MyClass.method2();
  • 实际上,静态方法在创建时被装入Staticmethod类型的对象中,静态方法没有self,也没有class,能够被类本身直接调用,当然也可以被对象实例调用
  • 类方法在创建的时候被装如Classmethod类型的对象中,类方法在定义时需要名为cls的参数,cls和self类型,会自动绑定当前的类。同样可以被类和类实例调用

   转载规则

《Python对象属性进阶学习笔记字》GajAngels 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。