python允许对内置函数进行赋值,以致覆盖原有的函数功能。从而导致依赖原有函数功能的应用出错。如何禁止对内置函数/变量的赋值操作?
python允许对内置函数进行赋值,以致覆盖原有的函数功能。从而导致依赖原有函数功能的应用出错。如何禁止对内置函数/变量的赋值操作(可能的话,没有办法就算了)?
如:
open=123
'''
写了好多好多代码后
'''
open('a.conf') #这时悲剧了。有什么办法直接禁止上面的“覆盖”操作吗?
[解决办法]
open对于python来说,好像没有什么特别的。他仅仅是__builtins__里面的一个普通的函数。
为什么允许在__builtins__里有open,而不允许别的module里有open呢?
python要怎样不允许对任意module中某一个特别的名字的定义呢?
可以在定义的时候做检测,抛出异常。这样的话,每一次的名称定义都要检测一下,那会不会影响效率呢?
即使是可以用预处理的方式检测对于open的重定义,那怎么才能避免exec中对open的重定义呢?还应该用上面的方法。
[解决办法]
f2和cc2虽然写法雷同,但是函数和类机制不一样吧,f2在未调用前,代码不会执行,不会立刻报错吧,但是类里那两行在定义的时候已经执行了。如果你强调一致性不该有差别,最好投诉给开发者,一般使用者只会告诉你顺着毛摸,估计您是不会满意的...
>>> x = 99
>>> class cc2:
print(x)
x = 22
99 # 定义完还未起实例,已经print
>>> x
99
>>> cc2.x
22
>>>
[解决办法]
http://docs.python.org/2/reference/simple_stmts.html#assignment-statements
貌似没有限制赋值对象