• python使用@property @x.setter @x.deleter


    python使用@property @x.setter @x.deleter

    @property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。

    • 只有@property表示只读。
    • 同时有@property和@x.setter表示可读可写。
    • 同时有@property和@x.setter和@x.deleter表示可读可写可删除。
    class student(object):  #新式类
        def __init__(self,id):  
            self.__id=id  
        @property  #读  
        def score(self):  
            return self._score  
        @score.setter #写  
        def score(self,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 and 100')   
            self._score=value  
        @property #读(只能读,不能写)  
        def get_id(self):  
            return self.__id  
      
    s=student('123456')  
    s.score=60 #写  
    print s.score #读  
    #s.score=-2 #ValueError: score must between 0 and 100  
    #s.score=32.6 #ValueError: score must be an integer!  
    s.score=100 #写  
    print s.score #读  
    print s.get_id #读(只能读,不可写)
    #s.get_id=456 #只能读,不可写:AttributeError: can't set attribute
    

    运行结果:

    60
    100
    123456
    
    class A(object):#要求继承object
        def __init__(self):
            self.__name=None
        
        #下面开始定义属性,3个函数的名字要一样!
        @property #读
        def name(self):
            return self.__name
        @name.setter #写
        def name(self,value):
            self.__name=value
        @name.deleter #删除
        def name(self):
            del self.__name
        
    a=A()
    print a.name #读
    a.name='python'  #写
    print a.name #读
    del a.name #删除
    #print a.name # a.name已经被删除 AttributeError: 'A' object has no attribute '_A__name'  
    

    运行结果:

    None
    python
    

    参考链接

  • 相关阅读:
    mongodb一个关键字对多个字段同时查询,mongodb $or $and查询
    用Supervisord管理Python进程
    ImportError No module named memcache
    eclipse项目显示标尺
    Eclipse 安装插件后不显示的解决办法
    Flutter入门到放弃笔记(一)--Mac电脑配置Flutter环境
    iOS 动态库、静态库相关
    iOS 获取手机后台音频状态以及类别
    Swift 懒加载
    Swift中@ojbc 重载用法
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/12919881.html
Copyright © 2020-2023  润新知