【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

 

posted on 2024-06-24 20:25  彩屏黑白  阅读(1)  评论(0编辑  收藏  举报

导航