美文网首页
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