• 类的property用法


    property: 在新式类中,将类的方法变成属性,方便调用, 1,对他的get方法,添加@property装饰器, 对他的set方法和del方法要是同名函数的,添加@get方法对应的的函数名.setter, 对于python2 的经典类,只有类的get方法有效

    class Student(object):
        @property
        def birth(self):
            print("birth的get方法")
            return self._birth
    
        @birth.setter
        def birth(self, value):
            print("birth的setter方法")
            self._birth = value
            print(self._birth)
    
        @birth.deleter
        def birth(self):
            print("birth的deleter方法")
    s = Student()
    s.birth = 23    # 设置
    print(s.birth) # 获取
    s.birth=22  # 执行装饰器带有settter的方法
    del s.birth   #  # 执行装饰器带有settter的方法
    
    
    class Foo(object):
        def get_bar(self):
            print('getter......')
            return '老王'
        def set_bar(self,value):
            print('setter........')
            return 'set value'+ value
        def del_bar(self):
            print('deleter........')
            return "删除老王"
        BAR = property(get_bar,set_bar,del_bar,"description......")  #用help(property) 可查看property的各种参数方法
    
    obj = Foo()
    print(obj.BAR)
    obj.BAR = "alex"   # 自动调用第二个参数中定义的方法,set_bar方法,并将"alex'当做参数传入
    desc = Foo.BAR.__doc__         # 自动获取第四个参数中设置的值, description..
    del obj.BAR # 自动调用del_bar 方法
    输出:
    birth的setter方法
    23
    birth的get方法
    23
    birth的setter方法
    22
    birth的deleter方法
    getter......
    老王
    setter........
    deleter........
    
    

    property应用

    初始:

    class Student(object):
        def get_score(self):
            print('你个网吧打啊')
            return self._score
    
        def set_score(self, value):
            print('吃啥啊',value)
            if not isinstance(value, int):
                raise ValueError('score must be an integer!')
            if value < 0 or value > 100:
                raise ValueError('score must between 0 ~ 100!')
            self._score = value
    
    s = Student()
    s.set_score(60) # ok!
    print(s.get_score())
    s.set_score(90)
    print(s.get_score())
    输出:
    吃啥啊 60
    你个网吧打啊
    60
    吃啥啊 90
    你个网吧打啊
    90
    

    优化:

    class Student(object):
        @property
        def score(self):
            return self._score
    
        @score.setter
        def score(self,value):
            if not isinstance(value, int):
                raise ValueError('分数必须是整数才行呐')
            if value < 0 or value > 100:
                raise ValueError('分数必须0-100之间')
            self._score = value
    
    s = Student()
    s.score = 60 # OK,实际转化为s.set_score(60)
    print(s.score )# OK,实际转化为s.get_score()
    s.score = 98
    print(s.score )
    输出:
    60
    98
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    软件项目技术点(2)——Canvas之坐标系转换
    软件项目技术点(2)——Canvas之平移translate、旋转rotate、缩放scale
    用html5的canvas和JavaScript创建一个绘图程序
    javascript学习之BOM
    HTML5 之拖放(drag与drop)
    fluent-ffmpeg 常用函数
    ffmpeg用法及如何使用fluent-ffmpeg
    解决js动态改变dom元素属性后页面及时渲染问题
    软件项目技术点(8)—— canvas调用drawImage绘制图片
    Oracle数据库rownum用法集锦
  • 原文地址:https://www.cnblogs.com/heris/p/14667601.html
Copyright © 2020-2023  润新知