类中属性和property

知识点

类对象/属性、实例对象/属性

  • 实例化过程:

    当通过类名(a)实例化一个对象的时候,此时会调用类中__new__方法开辟一个独立的空间并返回该空间的引用(对象b),然后将该引用传递给 __init__方法,__init__方法会在新开辟的空间中初始化属性信息(变量),而对象a所拥有的各类方法则可以通过__class__方法直接寻找到类对象中的方法。

  • 调用方式:

    实例对象:可以调用实例属性、实例方法、类属性、类方法、静态方法

    类对象:可以调用类对象、类属性、静态方法

    实例对象调用类属性的方式:实例对象名.__class__.类属性名

property属性

  • 定义和调用

    • 方法1:通过添加修饰符

      1. 定义时,在实例方法的基础上添加**@property装饰器**,并且仅有一个self参数。调用时,无需加括号
      2. 设置property属性赋值时,使用xx.setter装饰器
      3. 设置property属性删除时,使用xx.deleter装饰器
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      class Test(object):

      def __init__(self, name):
      self.name = name

      @property
      def listen(self):
      return self.name

      @listen.setter
      def listen(self, value):
      self.name = value

      @listen.deleter
      def listen(self):
      def self.name

      clock = Test()
      # 调用时无需加括号
      clock.listen # 自动调用@property的方法
      clock.listen = 200 # 自动调用@listen.setter的方法
      del clock.listen # 自动调用@listen.deleter的方法
    • 方法2:通过类属性

      通过正常定义函数的方式,然后通过property方法将定义的函数转变为属性即可

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      # property接受四个参数
      # 第一个参数:调用【对象.属性】时自动触发的执行方法
      # 第二个参数:调用【对象.属性 = 属性值】时自动触发的执行方法
      # 第三个参数:调用【del 对象.属性】时自动触发的执行方法
      # 第一个参数:调用【对象.属性.__doc__】时自动触发的执行方法
      class Test(object):

      def __init__(self, name):
      self.name = name

      def get_method(self):
      return self.name

      def set_method(self, value):
      self.name = value

      def del_method(self):
      del self.name

      # property中除第一个参数外,其它默认为None
      listen = property(get_method, set_method, del_method, "__doc__的内容")

      test = Test("name")
      test.listen # 自动调用property中get_method方法
      test.listen = 7 # 自动调用property中set_method方法
      del test.listen # 自动调用property中del_method方法
      test.listen.__doc__ # 自动输出property最后一个参数的内容
  • 功能

    定义一个私有属性,然后配置两个公有方法用于对私有属性的数据进行过滤。此时通过property方式更加简洁

  • 优势

    如果通过函数的方式进行调用,则需要考虑是否需要传递参数,而通过property装饰器则不需要考虑。简化了调用者获取数据的流程