标签:trace linux 比较 The last instance setter cal name
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
标签:trace linux 比较 The last instance setter cal name
原文地址:https://www.cnblogs.com/ruguokeyi/p/11913259.html