Python之self
一、Self特性:
self是类的实例对象本身,self代表类的实例,而非类
self是类方法默认的第一个参数而且是必须的,不写会报错
self的名字并不是规定死的,但是最好还是按照约定是用self
self的作用主要表示这个变量是类的公共变量
self的属性,名称前加上两个下划线,就变成了一个私有变量(private),
只有内部可以访问,外部不能访问
一个独立的函数不需要加self函数(加了不影响,但是没有必要)
self在定义时需要定义,但是在调用时会自动传入。
同一个类中,调用类中其他方法时,需要加self(若不加会报错)
如果定义和调用时均不传类实例是可以的,就是类方法。
二、Self特性实例:
1). self代表类的实例,而非类;self不必非写成self
class Test:
def prt(this):
print(this)
print(this.class)
t=Test()
t.prt()
执行结果:
<main.Test object at 0x0000023E2A5331D0> #类的实例
<class ‘main.Test’> #类
类方法中至少要包含一个参数,但并没有规定此参数的名称(完全可以叫任意参数名),之所以将类方法的第一个参数命名为 self,只是 Python 程序员约定俗成的一种习惯,这会使程序具有更好的可读性。
为什么程序在调用实例方法和构造方法时,不需要为第一个参数传值呢?
当某个对象调用类方法时,该对象会把自身的引用作为第一个参数自动传给该方法,Python 会自动绑定类方法的第一个参数指向调用该方法的对象。因此,Python解释器就能知道到底要操作哪个对象的方法了,因此,程序在调用实例方法和构造方法时,不需要为第一个参数传值
2).如果定义和调用时均不传类实例是可以的,就是类方法。
运行结果:
<class ‘main.Test’>
三、python的self和java的this的区别与联系
相同点:从技术上讲,python的self和java的this都用于同一事物,访问与当前实例关联的变量。
不同点:您必须明确地将self包含为Python中实例方法的第一个参数,而Java并非如此
名称self可以是任意,而Java并非如此。