self代表类的实例,而非类。
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt() Output: --------------------------------------------------------------------------------------------------
从上面的例子中可以很明显的看出,self代表的是类的实例。而self.class则指向类。
self不必非写成self
把上面的代码改写一下。
class Test: def prt(this): print(this) print(this.__class__) t = Test() t.prt()
改成this后,运行结果完全一样。
当然,最好还是尊重约定俗成的习惯,使用self。
self可以不写吗
在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。
把上面的t.prt()一行改写一下,运行后的实际结果完全相同。
实际上已经部分说明了self在定义时不可以省略
class Test: def prt(): print(self) t = Test() t.prt()
运行时提醒错误如下:prt在定义时没有参数,但是运行时强行传了一个参数。
由于上面解释过了t.prt()等同于Test.prt(t),所以程序提醒多传了一个参数t。
Traceback (most recent call last): File "h.py", line 6, int.prt() TypeError: prt() takes 0 positional arguments but 1 was given
如果定义和调用时均不传类实例是可以的,就是类方法。
class Test: def prt(): print(__class__) Test.prt() Output: --------------------------------------------------
在继承时,传入的是哪个