zoukankan      html  css  js  c++  java
  • python装饰器之property

    python装饰器之@property

    @property是python内置的装饰器,主要作用是把类中的一个方法变为类中的一个属性,并且使定义属性和修改现有属性变得更容易

    class UserInfo(object):
        @property
        def name(self):
            return self.__name
    
        @name.setter
        def name(self,name):
            if isinstance(name,str):
                self.__name = name
            else:
                raise TypeError("The name must be str")
    
    if __name__ == "__main__":
        user = UserInfo()
        user.name = "linux超"
        print("我的名字是",user.name)
        user.name = ["linuc"]
        print("我的名字是",user.name)

    输出结果:

    我的名字是 linux超
    Traceback (most recent call last):
      File "E:/Demotest/test4.py", line 17, in <module>
        user.name = ["linuc"]
      File "E:/Demotest/test4.py", line 11, in name
        raise TypeError("The name must be str")
    TypeError: The name must be str

    如果不使用@property,想要达到同样的效果

    class UserInfo(object):
        def name(self):
            return self.__name
    
        def set_name(self,name):
            if isinstance(name,str):
                self.__name = name
                return self.__name
            else:
                raise TypeError("The name must be str")
    
    if __name__ == "__main__":
        user = UserInfo()
        user.name = "linux超"
        print("我的名字是",user.set_name(user.name))
        user.name = ["linuc"]
        print("我的名字是",user.set_name(user.name))

    输出结果

    我的名字是 linux超
    Traceback (most recent call last):
      File "E:/Demotest/test4.py", line 19, in <module>
        print("我的名字是",user.set_name(user.name))
      File "E:/Demotest/test4.py", line 12, in set_name
        raise TypeError("The name must be str")
    TypeError: The name must be str

    需要专门定义一个方法来定义属性,获取属性也比较麻烦。

    使用装饰器@property会更直观

    参考:

    https://www.cnblogs.com/linuxchao/p/linuxchao-property.html

  • 相关阅读:
    需要
    js学习
    vc 异常堆栈记录,这样不怕突然异常了
    1
    [Java] 动态代理 02 --生成代理主题角色
    [Java] 静态代理
    [Java] 反射机制 02
    [Java] 反射机制 01
    [Java] 正则表达式 02 EmailSpider 抓邮件, CodeCounter 统计程序有效代码行数
    [Java] 正则表达式 01 (基本都概览)
  • 原文地址:https://www.cnblogs.com/ruguokeyi/p/11913259.html
Copyright © 2011-2022 走看看