删除器不会删除 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!
我有以下代码:
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!