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)
  • 相关阅读:
    网络资源
    为什么MVC不是一种设计模式? ---比较Backbone和Ext4.x在MVC实现上的差异
    Developing Backbone.js Applications
    【实例】爬虫:下载图片
    scheme语言编写执行
    HDU 4403 A very hard Aoshu problem (DFS暴力)
    【Python】输出程序运行的百分比
    SQL_字符操作函数
    Linux mm相关的问题
    java中Volatile修饰符的含义
  • 原文地址:https://www.cnblogs.com/reconova-56/p/15152732.html
Copyright © 2011-2022 走看看