这是Python的良心选择。
首先,关于修补内置类型,这主要是一个设计decision其次是优化。我从 Python 邮件列表中潜伏的大量经验中了解到,对内置类型进行猴子修补虽然对小脚本来说很有趣,但在更大的脚本中没有任何好处。
其一,图书馆对类型做出某些假设。如果鼓励扩展默认类型,许多库最终会互相争斗。也会让人望而却步making新类型——双端队列是双端队列,有序集是有序集,字典是字典,应该就是这样。
文字语法是特别重要的一点。如果你不能保证[1, 2, 3]
就是一个清单,你能保证什么?如果人们能够改变这些行为,就会产生全球影响,从而破坏许多代码的稳定性。这是有原因的goto不鼓励使用全局变量。
我有一个特别的技巧am不过,喜欢。当你看到r"hello"
,这似乎是一种扩展的文字形式。
那么为什么不呢r[1, 2, 3]
?
class ListPrefixer:
def __init__(self, typ):
self.typ = typ
def __getitem__(self, args):
return self.typ(args)
class MyList(list):
def each(self, func):
return MyList(func(x) for x in self)
e = ListPrefixer(MyList)
e[1, 2, 3, 4].each(lambda x: x**2)
#>>> [1, 4, 9, 16]
最后,如果你真的想进行深入的 AST hack,请查看MacroPy https://github.com/lihaoyi/macropy.