应用场景

2019-02-12  本文已影响0人  匿隱

1.应用场景

getter: 获取对象属性的值之前想要做点儿别的事情,就给这个属性添加getter
setter: 给对象属性赋值之前想要做点儿别的事情,就给这个属性添加setter

2.getter

第一步:声明属性的时候在属性名前加_
第二步: 声明函数(函数没有除了self以外的参数,但是要与返回值。返回值就是获取属性拿到的值)
@property
def 去掉的属性名(self):
      做点别的事情
     返回属性的值
第三步:在类的外部通过对象.去掉
的属性去获取相关的属性

3.setter - 想要添加setter必须先要有getter

第一步:声明属性的时候在属性名前加_
第二步: 声明函数(函数除了self以外还需要一个参数,没有返回值。这儿的参数代表给属性赋的值)
@属性名去掉.setter
def 去掉
的属性名(self, 参数):
     做点别的事情
     给属性赋值
第三步:在类的外部通过对象.去掉_的属性去给相关属性赋值

class Person:
    def __init__(self, name=''):
        self.name = name
        self._age = 0
        self._week = 7    # 属性名前有_,使用属性的时候不要直接用

    @property
    def age(self):
        return self._age

    # 给age添加setter
    @age.setter
    def age(self, value):
        if not isinstance(value, int):
            raise ValueError
        if not (0 <= value <= 150):
            raise ValueError
        self._age = value

    # 给week添加getter
    @property
    def week(self):
        if self._week < 7:
            return '星期%d' % self._week
        else:
            return '星期天'

    @week.setter
    def week(self, value):
        self._week = value


def main():
    p1 = Person('小明')

    # 通过不带_的属性给属性赋值实质是在调用setter对应的函数
    p1.age = 45
    p1.age = 3

    # 这个操作实质是在调用week函数
    # 通过不带_的属性来获取属性的值实质是在调用getter对应的函数
    print(p1.week)
    p1.week = 4
上一篇 下一篇

猜你喜欢

热点阅读