zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    JS打印代码示例
    javascript图片360°旋转
    动态载入/删除/更新外部 JavaScript/Css 文件
    AviSynth入门与应用指南
    汇编64讲(搞免杀、破解必看)在线观看
    C#模拟登录总结
    同时使用apache和IIS,共用80端口的一个解决方案
    Dos命令集合
    批处理for命令详解
    JavaScript定义类的几种方式
  • 原文地址:https://www.cnblogs.com/reconova-56/p/15152732.html
Copyright © 2011-2022 走看看