#1.self代表类的实例,而非类
class Stest:
def p(self):#可将self理解为实例t
print(self)
print(self.__class__)
t = Stest()#t为Stest的实例
t.p()
运行结果:
<__main__.Stest object at 0x00000000021D8860>
<class '__main__.Stest'>#2.self总是指调用时的类的实例。
#在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例。
class Parent:
def p(self):
print(self)
class Child(Parent):
def c(self):
print(self)
child = Child()
child.c()
child.p()
parent = Parent()
parent.p()
parent.c()
运行结果:
<__main__.Child object at 0x00000000029A0198>
<__main__.Child object at 0x00000000029A0198>
<__main__.Parent object at 0x00000000029A0358>
parent.c()
AttributeError: 'Parent' object has no attribute 'c'#3.Python中的self用于类的方法中,不可省略
class Student():
def __init__(self,name):
self.name=name
def pname():#如果去掉此处的self,提示pname() takes 0 positional arguments but 1 was given
print('the student name is:',self.name)#如果去掉此处的self,会提示name 'name' is not defined
s=Student('xiaola')
s.pname()
运行结果:
TypeError: pname() takes 0 positional arguments but 1 was given#4.self也可以换成其他自己喜欢的词
class Student():
def __init__(lucy,name):
lucy.name=name
def pname(lucy):
print('the student name is:',lucy.name)
s=Student('xiaola')
s.pname()
运行结果:
the student name is: xiaola
#5.同一个类中调用其他的方法时需要加self
class Test():
def test1(self):
print('this is test1')
def test2(self):
self.test1()
test1()#不加self,报错:name 'test1' is not defined
t=Test()
t.test2()
运行结果:
this is test1
NameError: name 'test1' is not defined#6.一个独立的函数不需要加上self参数
def Teather(tname):
print('the teacher name is:',tname)
Teather('dala')
运行结果:
the teacher name is: dala#7.当然,独立的函数加上self也不影响,但是没有必要
def Teather(self,tname):
print('the teacher name is:',tname)
Teather('','dala')#需传入一个空参数
运行结果:
the teacher name is: dala#8.self的作用主要表示这个变量是类中的公共变量
#在类的一个方法定义了一个变量name1,这个变量就唯一的属于setname这个方法,其他方法无法使用这个变量
#使用self会告诉所有的方法,这个变量是我们共有的,可以随便用
class Student():
def setname(self):
name1='jay'
self.name='joly'
def getname(self):
print('her name is:',self.name)
print('his name is:',name1)#报错:name 'name1' is not defined
s=Student()
s.setname()
s.getname()
运行结果:
her name is: joly
NameError: name 'name1' is not defined#9.self的属性,名称前加上两个下划线,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
class Student2():
def setname(self):
self.name1='jay'
self.__name2='joly'
def getname(self):
print('her name is:',self.name1,self.__name2)
s=Student2()
s.setname()
s.getname()
print(s.name1)
print(s.__name2)
运行结果:
her name is: jay joly
jay
AttributeError: 'Student2' object has no attribute '__name2'
版权声明:本文为qq_15158911原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。