python面向对象-@property和@setter装饰器

概述

一般 实例属性 定义成私有,然后通过 setter 方法设置值,getter 方法获取值

这种操作比较麻烦,在python中通过装饰器@property简化操作

注意顺序:
装饰器@property必须在@setter的上面

案例

#coding=utf-8

class Student:
    #相当于get_name()方法
    @property
    def name(self):
        print("执行get_name")
        return self._name

    #相当于set_name()方法
    @name.setter
    def name(self,name):
        print("执行set_name")
        self._name=name

    #相当于get_age()方法
    @property
    def age(self):
        print("执行get_age")
        return self._age

    #相当于set_age()方法
    @age.setter
    def age(self,age):
        print("执行set_age")
        self._age=age

调用

xiaoming=Student()
xiaoming.name="小明" #调用set_name()方法
xiaoming.age=19 #调用set_age()方法
print("xiaoming.name=%s"%xiaoming.name) #调用get_name()方法
print("xiaoming.age=%s"%xiaoming.age) #调用get_age()方法

只读属性

如果不定义@age.setter和方法,就表示age为只读属性

总结

  1. 装饰器@property是简化属性操作,替代调用setter、getter方法的

  2. 与__setattr__、__getattribute__等自定义属性不同


原文出处:/show_1EF2GjIMnVx9.html