python装饰器之property

Posted 刘小氓jiayou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于python装饰器之property的主要内容,如果未能解决你的问题,请参考以下文章

python装饰器之property

Python中的装饰器之写一个装饰器

Python:装饰器之有参装饰器

python三大器之装饰器的练习

python装饰器之自己的理解,欢迎更正

python装饰器之函数作用域