python变量范围

Osc*_*Ryz 7 python scope rationale

我正在教我的自我python,我正在将一些示例代码翻译成这个

class Student(object):
    def __init__( self, name, a,b,c ):
        self.name = name
        self.a = a
        self.b = b
        self.c = c

    def average(self):
        return ( a+b+c ) / 3.0 
Run Code Online (Sandbox Code Playgroud)

这几乎是我想要的课程定义

稍后在main方法中我创建一个实例并调用它 a

if __name__ == "__main__" :
    a = Student( "Oscar", 10, 10, 10 )
Run Code Online (Sandbox Code Playgroud)

这就是我如何找出变量a中声明main可用的方法average ,并使该方法的工作,我必须键入 self.a + self.b + self.c代替

这个的基本原理是什么?

我发现了相关问题,但我真的不知道它们是否大致相同

Ale*_*lli 9

Barenames(如a,b,c)总是作用域为局部或全局(除嵌套函数,它无处围绕在你的代码).基本原理是添加更多的范围会不必要地使事情变得更复杂 - 例如,如果在你self.a = a的名字中a可以限定你想要的东西(相当于self.a)那么分配本身就没有意义(给自己指定一个名字) ,所以你需要更复杂的规则.

self.a当你想要一些不同于简单,简单和优化行为的东西时,只使用限定名称(如),这是迄今为止最简单的方法 - 完全可行,没有任何复杂的规则,并允许编译器有效地优化事物(例如,一个名字的范围总是由词汇决定,而不依赖于动态变化的环境特征.因此,除了对具有更复杂的范围规则的其他语言的怀旧之外,实际上没有理由使复杂的名字复杂化.