positive: "self代表类的实例,而非类。<br>class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt() Output: --------------------------------------------------------------------------------------------------<br>从上面的例子中可以很明显的看出,self代表的是类的实例。而self.class则指向类。<br>self不必非写成self<br>把上面的代码改写一下。<br>class Test: def prt(this): print(this) print(this.__class__) t = Test() t.prt()<br>改成this后,运行结果完全一样。<br>当然,最好还是尊重约定俗成的习惯,使用self。<br>self可以不写吗<br>在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。<br>把上面的t.prt()一行改写一下,运行后的实际结果完全相同。<br>实际上已经部分说明了self在定义时不可以省略<br>class Test: def prt(): print(self) t = Test() t.prt()<br>运行时提醒错误如下:prt在定义时没有参数,但是运行时强行传了一个参数。<br>由于上面解释过了t.prt()等同于Test.prt(t),所以程序提醒多传了一个参数t。<br>Traceback (most recent call last): File ""h.py"", line 6, int.prt() TypeError: prt() takes 0 positional arguments but 1 was given<br>如果定义和调用时均不传类实例是可以的,就是类方法。<br>class Test: def prt(): print(__class__) Test.prt() Output: --------------------------------------------------<br>在继承时,传入的是哪个"
negative: 所谓作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在所有代码文件中使用,有些变量只能在当前的文件中使用,有些变量只能在函数内部使用,有些变量只能在for 循环内部使用。<br>变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。本节我们只讲解两种变量,一种是只能在函数内部使用的变量,另一种是可以在所有代码文件中使用的变量。<br>在函数内部定义的变量(局部变量)<br>在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为局部变量(Local Variable)。函数的形参也是局部变量,也只能在函数内部使用。