实现功能: 为类中的属性(私有的属性)提供设置和获取的方法(公有的方法)
实现方式1: 常规写法
# -*- coding: utf-8 -*- class Person(): def __init__(self, name=None): # 单下划线开头的变量, 标明是一个私有变量 # 这是开发者之间的一个约定. 但是外部类还是可以访问这个变量 self._name = name # 获取name属性的方法 def get_name(self): return self._name # 设置name属性的方法 def set_name(self, name): self._name = name p = Person() # 设置name属性 p.set_name("chinablue") # 获取name属性 print(p.get_name())
实现方式2: 使用property装饰器实现(函数方式调用装饰器)
# -*- coding: utf-8 -*- class Person(): def __init__(self, name=None): self._name = name def get_name(self): return self._name def set_name(self, name): self._name = name name = property(get_name, set_name) p = Person() # 使用常规方法 p.set_name("chinablue") print(p.get_name()) # 使用属性赋值方式 p.name = "djtest" print(p.name)
实现方式3: 使用property装饰器实现(@语法糖方式调用装饰器)
# -*- coding: utf-8 -*- class Person(): def __init__(self, name=None): self._name = name # 将调用方法转换成调用属性,属性名就是被修饰的函数名 @property def name(self): return self._name # 设置属性的逻辑写在这里 @name.setter def name(self, name): self._name = name p = Person() # 变量赋值时, 会触发@*.setter装饰的函数 p.name = "chinablue" # 变量读取时, 会触发@property装饰的函数 print(p.name)