删除器不会删除 python 中的 属性

Deleter does not delete the property in python

我有以下代码:

class User:
    def __init__(self, name):
        self.name = name
        self.__password = ""

    @property
    def password(self):
        if len(self.__password) == 0:
            return ""
        secret = self.__password[0]
        for i in range(len(self.__password) - 2):
            secret += "*"
        secret += self.__password[-1]
        return secret


    @password.setter
    def password(self, new_pass):
        if len(new_pass) < 6:
            for i in range(6 - len(new_pass)):
                new_pass += "#"
        self.__password = new_pass



    @password.deleter
    def password(self):
        if len(self.__password) > 10000:
            del self.__password


u = User("John")
u.password = "s"
print(u.password)
u.password = "L0nger passwords ArE M0r3 Secure 0r s0 th3y s@y!"
print(u.password)
del(u.password)
print(u.password)

问题是删除程序没有删除密码属性,我打电话给删除程序后仍然可以打印。我做错了什么?

嗯,当长度大于 10000 时,您只删除 属性。以下代码产生您寻求的结果:

    class User:
    def __init__(self, name):
        self.name = name
        self.__password = ""

    @property
    def password(self):
        if len(self.__password) == 0:
            return ""
        secret = self.__password[0]
        for i in range(len(self.__password) - 2):
            secret += "*"
        secret += self.__password[-1]
        return secret


    @password.setter
    def password(self, new_pass):
        if len(new_pass) < 6:
            for i in range(6 - len(new_pass)):
                new_pass += "#"
        self.__password = new_pass



    @password.deleter
    def password(self):
        if len(self.__password) > 10:
            del self.__password


u = User("John")
u.password = "s"
print(u.password)
u.password = "L0nger passwords ArE M0r3 Secure 0r s0 th3y s@y!"
print(u.password)
del(u.password)
try:
    print(u.password)
except:
    print("failed!")

结果:

s****#
L**********************************************!
failed!