Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么实例变量需要;“自我”;访问,但全局变量没有前缀?_Python - Fatal编程技术网

Python 为什么实例变量需要;“自我”;访问,但全局变量没有前缀?

Python 为什么实例变量需要;“自我”;访问,但全局变量没有前缀?,python,Python,可能重复: 在Python中,必须通过self.x访问实例变量,但只需编写x即可读取全局变量。为什么会这样?这是一个常见问题,但本质上是:这样做是为了避免名称冲突或混淆正在访问哪些实例或全局变量 哲学是“显式优于隐式”。那么为什么不对全局变量也遵循相同的原则呢?如果问题可能是实例和全局变量之间的混淆/名称阴影,那么更改其中一个显式变量的命名约定可以解决问题。虽然“全局变量”在Python中并不常见,但导入的模块等也在全局名称空间中,比Python中的任何其他模块都更常用,因此,在全局名称空间中

可能重复:


在Python中,必须通过
self.x
访问实例变量,但只需编写
x
即可读取全局变量。为什么会这样?

这是一个常见问题,但本质上是:这样做是为了避免名称冲突或混淆正在访问哪些实例或全局变量


哲学是“显式优于隐式”。

那么为什么不对全局变量也遵循相同的原则呢?如果问题可能是实例和全局变量之间的混淆/名称阴影,那么更改其中一个显式变量的命名约定可以解决问题。虽然“全局变量”在Python中并不常见,但导入的模块等也在全局名称空间中,比Python中的任何其他模块都更常用,因此,在全局名称空间中调用对象的不方便约定比在实例变量名称空间中调用对象的约定更痛苦。@djechlin:这不是完全相同的问题。为什么不对全局变量也遵循同样的原则呢?