【python】编码规范
【编码规范】实例属性
【实例属性】应该是隐藏的,只允许通过类提供的方法来间接实现对实例属性的访问和操作
【解决】
【办法一】property()
属性名 = property(fget=None, fset=None, fdel=None, doc=None)
fget:用于获取属性的方法
fset:用于设置属性的方法
fdel:用于删除属性的方法
doc:属性的说明文档字符串
【办法二】@property
- 是一个装饰器,相当于 getter 装饰器
- 可以使用 @property 来创建只读属性,将一个实例方法变成一个相同名称的只读实例属性,这样可以防止属性被修改
-
# @property class PoloBlog: def __init__(self, name): self.__name = name @property def name(self): return self.__name blog = PoloBlog("小菠萝") print(blog.name) blog.name = "test" # 输出结果 小菠萝 blog.name = "test" AttributeError: can't set attribute
setter 装饰器
# @setter class PoloBlog: def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter def name(self, name): self.__name = name blog = PoloBlog("小菠萝") # 打印属性值 print(blog.name) # 修改属性 blog.name = "新的小菠萝" print(blog.name) # 输出结果 小菠萝 新的小菠萝
deleter 装饰器
class PoloBlog: def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter def name(self, name): self.__name = name @name.deleter def name(self): print("删除 __name") blog = PoloBlog("小菠萝") # 打印属性值 print(blog.name) # 修改属性 blog.name = "新的小菠萝" # 删除属性 del blog.name # 输出结果 小菠萝 删除 __name