zoukankan      html  css  js  c++  java
  • 类的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
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    小米手机miui8.5连接电脑
    js数组map方法
    wxui入门
    动画函数封装
    系列属性(offset、scroll、client)
    定时器( setInterval和 setTimeout)
    BOM(浏览器对象模型)
    事件(绑定、解绑、冒泡)
    元素(element)创建
    节点(node)操作
  • 原文地址:https://www.cnblogs.com/heris/p/14667601.html
Copyright © 2011-2022 走看看