Python中的文字可以被覆盖吗?

Python中的文字可以被覆盖吗?,第1张

概述找不到一个更好的短语标题的方法,随时纠正. 我对Python很新,目前正在尝试使用这种语言..我注意到所有内置类型都无法与其他成员进行扩展..我想举个例子来添加每个方法到列表类型,但是这是不可能的.我意识到这是为了效率原因而设计的,大多数内置类型都是在C中实现的. 那么,为什么我发现要重写这个行为就是定义一个新的类,它扩展了列表,但是没有做任何事情.然后,我可以将变量列表分配给该新类,并且每次要实 找不到一个更好的短语标题的方法,随时纠正.

我对Python很新,目前正在尝试使用这种语言..我注意到所有内置类型都无法与其他成员进行扩展..我想举个例子来添加每个方法到列表类型,但是这是不可能的.我意识到这是为了效率原因而设计的,大多数内置类型都是在C中实现的.

那么,为什么我发现要重写这个行为就是定义一个新的类,它扩展了列表,但是没有做任何事情.然后,我可以将变量列表分配给该新类,并且每次要实例化一个新列表时,我将使用列表构造函数,就像将用于创建原始列表类型一样.

class MyList(List):    def each(self,func):       for item in self:           func(item)List = MyListmy_List = List((1,2,3,4))my_List.each(lambda x: print(x))

输出:

1234

这个想法可以通过定义一个方法获得一个构建它的类型,并返回一个扩展该类型的类当然.此外,原始列表变量可以保存在另一个变量中以保持对其的访问.

我现在面对的问题是,当您通过其文字形式(即[1,4])实例化一个列表时,它仍然会使用原始列表构造函数(或者是吗?).有办法重写这个行为吗?如果答案为否,您是否知道使用户能够扩展内置类型的其他方法? (就像JavaScript允许扩展内置原型).

我发现这个限制的内置(无法添加成员)是Python的缺点之一,使其与其他用户定义的类型不一致…总体而言,我真的很喜欢这种语言,我真的不明白为什么这样限制是非常必要的.

解决方法 这是Python的认真选择.

首先,关于修补内置类型,这主要是设计决策,仅次于优化.我从许多潜伏的Python邮件列表中学到了猴子修补内置类型,虽然对于小脚本来说是愉快的,但在任何更大的东西上都不会有好的目的.

一个图书馆对类型做出某些假设.如果鼓励扩展默认类型,许多图书馆就会相互争斗.它也会阻止制作新的类型 – 一个deque是一个deque,一个有序集是一个有序集,一个字典是字典,应该是这样.

文字语法是一个特别重要的一点.如果您不能保证[1,3]是一个列表,您能保证什么?如果人们可以改变这些行为,那么它将会产生这样的全球影响,从而破坏很多代码的稳定性.有一个原因goto和全球变量不鼓励.

有一个特别的黑客,我喜欢,但是.当你看到r“你好”,这似乎是一个扩展的文字形式.

那么为什么不r [1,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,4].each(lambda x: x**2)#>>> [1,4,9,16]

最后,如果你真的想做很深的AST黑客,看看MacroPy.

总结

以上是内存溢出为你收集整理的Python中的文字可以被覆盖吗?全部内容,希望文章能够帮你解决Python中的文字可以被覆盖吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1207012.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存