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会更直观
参考:
以上是关于python装饰器之property的主要内容,如果未能解决你的问题,请参考以下文章