• 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)
  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/reconova-56/p/15152732.html
Copyright © 2020-2023  润新知