我刚刚在Python 3.4中实现了一个自定义的非标点和纯字母字符串对象:
from string import ascii_letters
class astr(str):
"""
astr is a custom non-punctuated and purely alphabetic string
that returns a string of zeros if an impure string is provided.
"""
def __new__(self, content):
if (lambda s: True if False not in [False for c in s if c not in ascii_letters] else False)(content):
return str.__new__(self, content)
else:
return str.__new__(self, ''.join([str(0) for c in content]))
x = astr("Normalstring")
y = astr("alphanumeric7234852fsd36asd4fgh232")
z = astr("Ácçènts")
print(x)
print(y)
print(z)
是否有可能以我刚才使用的方式“破解”内置对象:
x = "Normalstring"
我知道ruby允许这种技巧,但我不是一个Python向导,所以,也许有一些我不知道的黑魔法技巧允许人们这样做(或者是__新__魔法最终的“黑客限制”?)
顺便说一下,我没有做任何有用的事情。我只是好奇。编辑:
我的问题更具体,更重要的是,它提出了原因。也许有人知道为什么Python的开发人员选择这样做。
答案 0 :(得分:0)
TypeError: can't set attributes of built-in/extension type 'str'
不。