Python内置装饰器----@property

实现功能: 为类中的属性(私有的属性)提供设置和获取方法(公有的方法)

实现方式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)
原文地址:https://www.cnblogs.com/reconova-56/p/15152732.html