python—面向对象详解(4-2)
【摘要】 python—面向对象详解(4-2)
目录
一.类中的参数self
- self 是类函数中的必传参数,且必须放在第一个参数位置
- self 是一个对象,它代表实例化的变量自身
- self 可以直接通过点来定义一个类变量self.name = 'xiaoding'
- self中的变量与含有self参数的函数可以在类中的任何一个函数内随意调用
- 非函数中定义的变量在定义的时候不用self
- 在实例化的过程中,Python会将self提前传入需要self的函数的括弧中,所以我们在执行的时候并不需要传递,但如果没有实例化,所以Python没办法自动为我们添加self到所需要的类函数中,于是就会报错
- 注意!如果在类中的函数体内定义变量,我们就要通过self.+变量名进行赋值,这样在实例化后或者在其他函数中就可以找到这个变量。不过,在类中与函数同级别,也就是在函数体外定义的变量,我们称作属性,这种类型的变量并不需要添加self,也可以在函数体内使用,但前提是这个函数必须要带有self这个参数,且位置不能错误,所以,self这个对象其实就是当前这个类的中间桥梁,通过它我们可以找到这个类的所有变量和函数并且使用。
- self虽然作为参数传递进去,但更多的是起到类中的各个函数变量相互调用的作用,以及实例化对象,调用类中属性和方法的功能
- self不放在第一个位置它就不是类函数了
二.Python中self的解析与总结
1.self是什么?——python中self代表类的实例
- 在Python的类中self代表实例本身,明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的,在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。具体来说,传入的是该实例的内存地址。
- 在调用实例的方法时,Python解释器会自己把实例和变量传给类的函数中的self。
- 举个例子,代码I定义了一个类Test,在这个类中,self为参数变量,在类Test实例化得到实例ins时,python解释器自动调用__init__, 执行Test.init(ins,123), 该self可接收实例ins的内存地址,从而self代表了实例本身。类似的,如果实例化ins后,执行ins.fun1(), python解释器会将ins.fun1()解释成Test.fun1(ins)。可见,self这个变量是无需用户手动传送值的,解释器会自动帮我们给其传递实例的引用。需要注意的是,self不是关键字,换言之,可以用其它的合法变量名替换self,但是,规范和标准建议我们一致使用self。
2.Python中只有针对类来说self才有意义
- Python中的self说的即是python类中的self
3.self只能用在python类的方法中
4.举例说明
可能大家还不是很理解,根据类的两个关键要素属性和方法,具体来使用self来看看实际应用效果:
1. 属性
(1)如果变量定义在类下面而不是类的方法下面,那这个变量既是类的属性也是类实例的属性。
- 运行结果
(2)如果变量定义在类的方法下面,如果加了self,那这个变量就是类实例的属性,不是类
的属性;如果没有加self, 这个变量只是这个方法的局部变量,既不是类的属性也不是类实
例的属性。
- 运行结果 :
2.方法
(1)如果在类中定义函数时加了self,那这个函数是类实例的方法,而不是类的方法。
- 运行结果
(2)如果在类中定义函数的时候没有加self,那这个函数就只是类的方法,而不是类实例的方法
- 运行结果
三.类的构造函数
- 类中的一种默认函数,用来将类实例化的同时,将参数传入类中
- 构造函数在类的最上面定义
- 构造函数的主要作用是为对象分配空间,并初始化对象的状态。在python中,构造函数使用__init__来定义。
- 在创建对象时,Python解释器会自动调用构造函数,并将对象作为第一个参数传递给它。在构造函数中,你可以访问对象的各个属性并进行初始化操作,需要注意的是,构造函数只会在对象创建时调用一次。如果你需要在对象的生命周期内进行其他初始化操作,可以在类中定义其他方法,并在需要的时候手动调用。
1.构造函数的创建
- a,b代表的是实例化的同时希望传进去的参数,然后将参数绑定到self中,通过self.的形式绑定之后。我们就可以在类的各个函数中进行调用了
- 注意!!构造函数请定义在最上边,这是一个好的规范
2.构造函数的用法
3.实战
输出结果
四.对象的生命周期
1.对象的生命周期
- 对象指的是实例化的对象
- 凡是在类中左右各有两个下横线的函数,都是类中的内置函数
- 通过dir函数就可以查看对象所有的内置函数
- 每个对象调用内置函数del的时候,del函数会帮助我们通知内存管家,这个时候内存管家将内存中的这个对象从内存中的房子中请出去,从而达到释放这个内存块,Python中的一切都是对象,所以它们也会按照这个规律生存与消亡,Python中的内存管理都是自动去完成的,所以并不需要我们特地的去对它处理,这里的del函数并不需要我们书写和定义,它在一个类实例化之后就会默认存在并且拥有通知内存管家清理对象的功能,这也是Python方便的特点之一
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)