美文网首页
01.14 - getter与setter

01.14 - getter与setter

作者: xxxQinli | 来源:发表于2019-01-14 17:21 被阅读0次

应用场景

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

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

getter

  • 第一步 声明属性的时候在属性名前加_

  • 第二步:声明函数(函数没有除了self以外的参数,但是要有返回值,返回值就是获取属性要拿到的值

@property

函数名是去掉下划线的属性名

def 去掉\_的属性名(self):

 做点别的事情

 返回属性的值
  • 第三步:在类的外部通过对象.去掉下划线的属性去使用或获取相关的属性

setter - 想要添加setter,必须先要有getter

  • 第一步:声明属性的时候在属性名前加_

  • 第二步:声明函数(函数除了self以外,还需要一个参数,没有返回值,这儿的参数代表给属性赋的值)

@属性名去掉\_.setter

def 函数名是去掉下划线的属性名(self, 参数):

 给属性赋值

 做点别的事情

-`第三步: 在类的外部通过对象.去掉_的属性去给相关属性赋值


class Ql_Person:  # 
    """ 
    类说明文档:
    """
    def __init__(self, name = ''):
        """
        函数说明文档:
        """
        self.name = name
        self._age = 0
        self._week = 7 # 属性名前有_, 使用属性的时候不要直接用

    
    # 添加getter
    @property
    def age(self):  #
        """
        函数说明文档:
        """
        return self._age
    
    # 添加setter
    @age.setter
    def age(self, age):
        if not isinstance(age, int):
            raise ValueError    
        if not 10 <= age <= 150:
            raise ValueError
        else:
            self._age = age




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


    def ql_(self, x):  #
        """
        函数说明文档:
        """
        pass
        return 
 


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

    #通过不带_下划线的属性给属性赋值实质是在调用setter对应的函数
    p1.age = 3
    p1.age = 'sjd'
    print(p1.week) #实质是在调用@property的week函数,因为有@property,所以不用加括号就可以调用函数,如果没有@property,就要加括号
    # 通过不带_的属性来获取属性的值实质实在调用getter对应的函数
    p1.week = 4 #不会报错,但不推荐,因为没有添加setter

if __name__ == '__main__':
    main()

相关文章

网友评论

      本文标题:01.14 - getter与setter

      本文链接:https://www.haomeiwen.com/subject/htejdqtx.html