Python中,关于@property装饰器
admin
2023-07-15 19:42:15
0次

1.为什么使用@property装饰器?在类中,当我么不想在外界直接调用到类的属性,或者不想展示属性的真实内容时,可以用到@property。
br/>在类中,当我么不想在外界直接调用到类的属性,或者不想展示属性的真实内容时,可以用到@property。

2.我们为什么不使用特定的方法来进行上面的操作?
原因是因为太繁琐。例:

class Person:
    def __init__(self, username, password) -> None:
        self.username = username
        self.__password = password

    def get_password(self):
        return self.__password

    def set_password(self, password):
        self.__password = password

p = Person("大狗", "123456")
print(p.get_password())

我们通过声明特别的方法来管理我们队属性的获取与设置,但在外界调用时会凸显出这是一个方法,而不是一个属性,这违背了我们想要隐匿属性的初衷,并且显得很繁琐。
3.当我们不想让调用者通过对象名.属性直接获取属性时,就可以使用@perproty装饰器。例:

class Person:
    def __init__(self, username, password) -> None:
        self.username = username
        self.__password = password

    @property
    def password(self):
        return self.__password

    @password.setter
    def password(self, password):
        self.__password = password

p = Person("大狗", "123456")
print(p.password)

定义属性的同名方法(不要设置成私有方法(__password()),这样会和属性名完全一致,在类内部会出现超出最大递归深度的错误,这是一个大坑...
在用@property装饰器装饰一个方法后,@property会自动设置一个@方法名.stetter的装饰器,用来帮助我们设置属性,如上代码所示。我们可以测试一下

class Person:
    def __init__(self, username, password) -> None:
        self.username = username
        self.__password = password

    @property
    def password(self):
        print(" in @property")
        return self.__password

    @password.setter
    def password(self, password):
        print("in setter")
        self.__password = password

p = Person("大狗", "123456")
print(p.password)
p.password = "654321"
print(p.password)

输出:

in @property
123456
in setter
in @property
654321

可以看到,我们不管用对象名.属性的方法设置属性或者获取属性都是通过调用相对应的方法来进行处理,这样在外部调用者就不知道时真的调用的属性还是方法,很好的隐匿可保护了我们的属性。在属性方法中我们还可以做一些特别的操作。例:

class Person:
    def __init__(self, username, password) -> None:
        self.username = username
        self.__password = password

    @property
    def password(self):
        # print(" in @property")
        return "该属性不对外展示"

    @password.setter
    def password(self, password):
        # print("in setter")
        self.__password = "加密后的:" + password

p = Person("大狗", "123456")
print(p.password)
p.password = "654321"
print(p.__dict__)

输出:

该属性不对外展示
{'username': '大狗', '_Person__password': '加密后的:654321'}

我们不对外展示密码,只进行密码的加密存储。这样就很好的保护了该属性。
欢迎留言。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...