Python学习-面向对象基础1
Python学习-面向对象基础1面向对象的三大特性封装继承多态基础概念类与对象self关键字特殊方法面向对象的三大特性面向对象将数据的属性和操作数据的方法封装成 “对象”以对象为基础完成各种操作通过类来定义对象的模板来提高代码的复用性、可读性和可维护性。面向对象是基于面向过程的。面向过程将复杂问题拆解为一系列按顺序执行的函数 / 步骤通过“分步解决”实现功能即分布拆解顺序执行。封装概念将对象的属性数据和方法操作数据的逻辑封装在一起同时隐藏对象内部的实现细节只对外暴露可控的接口供外部访问。增强安全性降低使用复杂度。继承概念让一个类子类 / 派生类复用另一个类父类 / 基类 / 超类的属性和方法同时子类可以扩展自己的属性和方法或重写父类的方法。代码复用。多态概念同一个接口方法名在不同的子类中有不同的实现逻辑调用时无需关心具体子类类型只需统一调用接口即可执行对应子类的行为。比如同一个函数接收不同的对象实现不同的功能。解耦扩展方便代码简洁基础概念类与对象类创建对象的模板 / 蓝图定义了对象的属性数据和方法行为属性用来存储对象的 “静态特征”方法用来定义对象的 “动态行为”。对象类的具体实例化结果是类的 “实体”。类的基本格式可通过class 类名:或class 类名():或class 类名(object):创建类。其中 object 是所有类的父类所有类的核心特性如属性、方法、魔术方法都继承自 object。在类外需通过对象名 类名()、对象名.类属性名()、对象名.方法名()进行调用和访问。# 1. 类声明大驼峰命名法默认继承objectclass类名: 可选类的文档字符串描述类的功能 # 2. 可选类属性所有实例共享类似于定义变量类属性名属性值# 3. 可选初始化方法创建实例时自动执行def__init__(self,参数1,参数2,...):# 实例属性每个实例独有必须加self前缀self.实例属性名1参数1self.实例属性名2参数2# 4. 可选实例方法类似于定义函数但第一个参数必须是selfdef方法名(self,参数...):方法体逻辑# 调用对象名类名()对象名.类属性名()对象名.方法名()# 定义一个学生类classStudent:# 类属性所有学生共享的学校名称school清华大学# 初始化方法创建实例时初始化姓名和年龄def__init__(self,name,age):self.namename# 实例属性姓名self.ageage# 实例属性年龄# 实例方法展示学生信息defshow_info(self):print(f姓名{self.name}年龄{self.age}学校{self.school})# 使用类创建实例stuStudent(张三,20)stu.show_info()# 输出姓名张三年龄20学校清华大学self关键字self 关键字是 Python 类中实例方法包括__init__的第一个参数的约定俗成名称指向当前类的具体实例对象本身。定义实例方法时第一个参数必须写 self调用方法时Python 会自动把实例本身传入 self无需手动传参。classCar:def__init__(self,color):# self指向创建的实例为实例绑定color属性self.colorcolordefdrive(self):# self访问当前实例的color属性print(f{self.color}的汽车正在行驶)# 创建实例时Python自动把car1传入__init__的selfcar1Car(红色)# 调用方法时Python自动把car1传入drive的selfcar1.drive()# 输出红色的汽车正在行驶car2Car(黑色)car2.drive()# 输出黑色的汽车正在行驶绑定 / 访问实例属性类内部调用在__init__中通过self.属性名 值为当前实例绑定独有的属性实例属性在其他实例方法中通过self.属性名访问 / 修改当前实例的属性。classPerson:def__init__(self,name):self.namename# 绑定实例属性defchange_name(self,new_name):self.namenew_name# 修改当前实例的name属性pPerson(张三)p.age28#其他实例没有age属性print(p.age)print(p.name)# 输出张三p.change_name(李四)print(p.name)# 输出李四注意实例创建后通过实例名.属性名 值可临时添加属性但仅对当前实例生效。调用实例的其他方法类内部调用在一个实例方法中可通过self.方法名()调用当前实例的其他方法。classStudent:# 初始化方法有参def__init__(self,name,score):self.namename self.scorescoredefcheck_pass(self):# 内部调用当前实例的show_result方法self.show_result()returnself.score60defshow_result(self):print(f{self.name}的成绩{self.score})stuStudent(王五,75)print(stu.check_pass())# 输出# 王五的成绩75# True特殊方法在 Python 类中以双下划线__开头和结尾的特殊方法会在特定场景下自动调用无需手动执行。__init__初始化实例属性初始化方法无返回值实例创建后自动触发执行有参和无参__str__当使用print(实例) / str(实例)打印输出对象时会自动调用该__str__()方法。默认打印的是实例对象的地址值一般会重写改为打印对象的属性值。注意__str__方法中使用 {self} 会导致无限递归调用自身classStudent:def__init__(self,name,age):self.namename self.ageagedef__str__(self):returnfStudent(姓名{self.name}年龄{self.age})stuStudent(张三,20)# 触发__str__print(stu)# 输出Student(姓名张三年龄20)print(str(stu))# 输出Student(姓名张三年龄20)__del__调用del删除对象或者文件执行完毕后会默认调用__del__()方法。__dict__Python中内置的属性可以将对象转换成字典。属性名做键属性值做值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2439714.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!