是否可以在Python中更改内置对象?如果没有,为什么?

时间:2015-06-07 22:56:28

标签: python class override

我刚刚在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的开发人员选择这样做。

1 个答案:

答案 0 :(得分:0)

TypeError: can't set attributes of built-in/extension type 'str'

不。