zoukankan      html  css  js  c++  java
  • 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
    

    参考链接

  • 相关阅读:
    设计模式之设计原则
    浅谈简单工厂模式和策略模式
    Flask-SQLAlchemy插件
    SQLAlchemy的ORM
    Flask 微博三方登录
    SQLAlchemy介绍和基本使用
    Flask常用的钩子函数
    Flask-Restful详解
    flask信号使用
    多线程爬取斗图图片
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/12919881.html
Copyright © 2011-2022 走看看