找不到更好的方法来表达标题,请随时更正。
我对 Python 还是很陌生,目前正在尝试使用这种语言。我注意到所有内置类型都不能用其他成员扩展。我想例如向该类型添加一个each
方法list
,但这会不可能。我意识到它是出于效率原因而设计的,并且大多数内置类型都是用 C 实现的。
好吧,我发现要覆盖此行为的一个原因是定义一个新类,该类扩展list
但不执行任何操作。然后我可以将变量分配list
给那个新类,每次我想实例化一个新列表时,我都会使用list
构造函数,就像它被用来创建原始list
类型一样。
class MyList(list):
def each(self, func):
for item in self:
func(item)
list = MyList
my_list = list((1,2,3,4))
my_list.each(lambda x: print(x))
输出:
1
2
3
4
这个想法当然可以通过定义一个方法来概括,该方法获取一个构建的类型并返回一个扩展该类型的类。此外,原始list
变量可以保存在另一个变量中以保持对其的访问。
我现在面临的唯一问题是,当您list
通过其文字形式(即[1,2,3,4]
)实例化 a 时,它仍将使用原始列表构造函数(或者是吗?)。有没有办法覆盖这种行为?如果答案是否定的,您是否知道使用户能够扩展内置类型的其他方法?(就像 javascript 允许扩展内置原型一样)。
我发现内置函数的这种限制(无法向它们添加成员)是 Python 的缺点之一,使其与其他用户定义的类型不一致......总的来说,我真的很喜欢这种语言,我真的不明白为什么会这样限制是非常必要的。