Python进阶
类和对象(二)
前言
在原来我发布过Python入门学习的学习笔记,但迟迟没有更新Python的进阶学习。今天有时间就更新一下。微信关注公众号:夜寒信息。致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持!
1
self
可能大家发现了之前在定义方法的时候,括号里都有一个self,那么什么是self呢?self就相当于是一个指针,当方法被调用时,self会传给类一个信号,让他知道是哪个方法被调用了。self就相当于在调用方法时,被调用的方法大喊,“是我(self)“,如果它不喊”是我(self)”,也就是不写self,那么调用时就不知道该传谁的方法了。
下面我们举个例子:
class Love:
def setName(self,name): #在传入self的同时还传入了name变量
self.name = name #赋值
def say(self):
print("我叫{}我喜欢夜寒哥哥".format(self.name))
下面我们来运行上面的代码
>>> a = Love()
>>> b = Love()
>>> a.setName('小红') #调用setName方法,赋值给name
>>> b.setName('小橙') #调用setName方法,赋值给name
>>> a.say()
我叫小红我喜欢夜寒哥哥
>>> b.say()
我叫小橙我喜欢夜寒哥哥
我们在调用同一个say()方法时得到的是不同的结果,这就是因为被调用时,self.name被返回,打印到了屏幕上。由此我们可以更深的理解self的含义和用法
2
__init__方法
__init__方法为构造方法,在实例化一个对象的时候,这个方法会在创建方法时调用。在实例化对象时,是可以传入参数的,这些参数会自动传入到__init__方法中,我们可以重写__init__方法,来自定义对象的初始化参数。
下面我们来举个例子:
class Love:
def __init__(self,name): #重写init方法,新加name变量
self.name = name
def say(self):
print("我叫{}我喜欢夜寒哥哥".format(self.name))
下面我们来运行这个代码
>>> l = Love('小红') #传入name的数据'小红'
>>> l.say()
我叫小红我喜欢夜寒哥哥
我们发现,我们传参数不需要再使用setName()方法,只需要在实例化对象时传入参数即可,若不传入参数则会报错
3
公有和私有
我们在定义变量的时候,默认所有的变量都是公有的,可以直接被查看的,例如之前Girl的例子,我们可以直接用g.look查看他的属性“可爱”,如果我们要将他变为私有变量,则只需要在他前面加上双下划线"__"即可
下面来举个例子:
class Love:
__name = '小红' #将name变为私有变量
def say(self):
print("我叫{}我喜欢夜寒哥哥".format(self.__name))
下面我们来运行这个代码
>>> l = Love()
>>> l.say() #用方法正常调用
我叫小红我喜欢夜寒哥哥
>>> l.name #当我们尝试打印name变量的内容
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
l.name #报错,查找不到该变量
AttributeError: 'Love' object has no attribute 'name'
>>> l.__name #当我们尝试打印__name变量的内容
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
l.__name #报错,查找不到该变量
AttributeError: 'Love' object has no attribute '__name'
这样我们就可以看出私有的含义。顺带一提,Python中的私有是伪似有,只是将变量名悄悄更改了,我们可以通过使用<对象>._<类名>__<变量名>打印出实际数据,例如:
>>> l._Love__name
'小红' #成功打印
end
关注我们