【Python】self的用法扫盲
在Python中,我们有两个重要的概念:类与实例
例如:我们在现实生活中人就是一个类,实例就是具体到某一个男人(张三、李四等)
1.类:定义人这个类
class People(object):
pass
2.实例:创建实例是通过类名+()实现
people1 = People()
3.类就像一个模板一样,我们现在在这个模板上加一些属性:age,name,使用内置方法__init__方法
class People(object): def __init__(self,name,age): self.name = name self.age = age
说明:①__init__方法的第一个参数永远是self,表示创建的类实例本身,在__init__内部就可以把各种属性都绑定到self,self就指向创建的实例本身 ②有了__init__方法就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传入
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.name = name self.age = age people1 = People('Jack',23) print(people1.name) #运行结果:Jack print(people1.age) #运行结果:23
这里的self是指类本身,self.name就是类People的属性变量,是People所有。name是外部传来的参数,不是People自带的。self.name = name的意思是把外部传来的参数赋给People自己的属性变量self.name
4.在类中定义函数时,第一参数永远是类的本身实例变量self,传递参数时不需要传递该参数
5.类实例本身就有这些数据,那么要访问这些数据,就没必要从外部访问,直接在类中定义访问数据的函数,这样,就可以把数据“封装”起来
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.name = name self.age = age def print_age(self): print("%s:%s" %(self.name,self.age)) people1 = People('Jack',23) people1.print_age() #运行结果:Jack:23
6.如果要让内部属性不被外部访问,那么只需要加两个下划线,就变成了私有变量,只有内部可以访问,外部无法访问。
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.__name = name self.__age = age def print_age(self): print("%s:%s" %(self.__name,self.__age)) people1 = People('Jack',23) people1.print_age() #运行结果:Jack:23
#-*- coding:utf-8 -*- class People(object): def __init__(self,name,age): self.__name = name self.__age = age def print_age(self): print("%s:%s" %(self.__name,self.__age)) people1 = People('Jack',23) people1.name #报错:'People' object has no attribute 'name' people1.__name #报错:'People' object has no attribute '__name'
作者:奔跑的金鱼
声明:书写博客不易,转载请注明出处,请支持原创,侵权将追究法律责任
个性签名:人的一切的痛苦,本质上都是对自己无能的愤怒
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!