面向对象编程 向右看齐 2021-11-02 04:02 569阅读 0赞 # 面向对象编程 # 面向过程编程:核心是过程,过程是一步一步的。先干啥,后干啥。 对扩展性要求较低的程序例如:系统内核,git,计算器,等等。 * 优点:逻辑清晰,复杂问题简单化,流程化 * 缺点:扩展性差,可维护性差 面向对象编程OOP:核心是对象,对象就是属性和方法的集合体,面向对象编程就是负责调度控制这一堆对象进行交互完成任务。 对扩展性要求高的程序,通常都是直接面向用户的,例如QQ,微信 * 优点:扩展性强,灵活性,重用性 * 缺点:逻辑复杂,无法准确预知结果 # 类与对象 # * 对象:属性和方法的集合体 * 类:类型,是一系列具有相同属性和方法的对象的集合 类中包含一系列对象,对象属于类。 现实世界中先有对象后有类,python中先有类,再实例化对象。在写项目时,先思考对象的属性和技能,再定义类。 ## 定义类和对象: ## 类在定义阶段,会运行代码 class 类名:(类名首字母大写) # 属性用变量来表示 # 技能用函数来表示 # 类名称 书写名称 首先是见名知意 名称是大驼峰命名法 # 驼峰就是单词首字母大写,大驼峰是第一个字母大写,小驼峰是第一个字母小写 # 类名加括号进行调用 # 类名() # 实例化对象 # res = 类名() # res可以使用.调用属性 属性的写法: 属性可以写在类中 类中的属性,是所有对象公共的 也可以写在对象中 对象中的属性,是每个对象的独特属性 如果类中和对象中存在同样的属性,先访问对象,如果没有再访问类 练习:描述一个老师 需要包含一个公共属性和一个独特的属性 class Teacher: school = 'oldboy' t1 = Teacher() t1.name = 'jack' t1.age = 28 属性的增删改查 增加属性 对象变量名称.属性 = 属性值 删除属性 del 对象的变量名称.属性名称 修改 对象.属性 = 新的值 查看属性 访问的是对象的所有属性 print(对象.__dict__) 访问对象的类的信息 print(对象.__class__) class People: pass print(People.__dict__) # 打印类的所有属性和方法 <class 'type'> print(People.__class__) # 打印类的类型 p1 = People() p1.name('nick') # 定义对象的独特属性 print(p1.__dict__) # 打印对象的所有属性和方法 print(p1.__class__) # 打印对象来自哪个类 <class '__main__.Student'> print(p1.__class__.__name__) # People del People.属性//对象.属性/方法 删除类的属性和方法以及对对象的属性和方法 p2 = Pople() p2.name = 'tank' # 添加类的对象的独特属性 对象的属性的查找顺序 首先先从对象本身—>类—>父类—>父类的父类—>object—>自己定制的元类—>type ## \_\_init\_\_方法 ## \_\_init\_\_方法叫做初始化方法,本质就是一个函数 1.当实例化对象时,会自动执行\_\_init\_\_方法 2.会自动将对象作为第一个参数传入,参数名称为self,self可以是别的名字,但不建议改 功能:用户给对象赋初始值 练习:创建一个类具备几个属性,通过初始化方法来给他设置属性 class Dog: def __init__(self,kind,color,age) self.kind = kind self.color = color self.age = age d1 = Dog("二哈","黑白",1) d2 = Dog('泰迪',"棕色",2) 需要注意的是:该函数不能有返回值/...只能是None 对象的精髓就是将数据和处理数据的函数整合到一起,这样一来拿到一个对象就同时拿到了需要处理的数据以及处理数据的函数。 对象可以通过.调用类中函数方法,默认类中方法是对象。 类也可以通过.调用类中函数方法,这时,函数方法就是一个普通的函数,需要传对象的参数。 # 对象的绑定方法 class Student: def __init__(self,name,pwd): self.name = name self.pwd = pwd def choose_school(self): # self是对象 print(f'{self.name}正在选择') # 调用类中属性,self.name s = Student('nick','123') # 实例化对象 s.choose_school() # 对象使用类中方法方法 Student.choose_school(s) # 调用类中方法需要传对象 # 对象的绑定方法 # 默认情况下类中的方法都是对象绑定方法 其特殊之处在于, 当使用对象调用该函数时会自动传入对象本身,作为第一个参数 当使用类名来调用时,它就是一个普通函数,有几个参数,就是传几个参数。 练习:写一个学生类,具备一个打招呼的技能,要输出自己的名字信息 class Student: def __init__(self,name): self.name = name def say_hello(self): print(f'hello my name is {self.name}') # 类的绑定方法 # 类绑定方法用@classmethod来装饰 特殊之处:不管用类还是对象调用,都会自动传入类本身,作为第一个参数。 什么时候绑定给对象:当函数逻辑需要访问对象中的数时 什么时候绑定给类:当函数对象逻辑需要访问类中的数据时。 需要使用类作为参数的时候就得使用类绑定方法@classmethod 需要使用对象作为参数的时候就得使用对象绑定方法 既不需要类作为参数又不需要对象作为参数,使用非绑定方法,@staticmethod. @classmethod让被装饰的函数给类使用,约定俗成参数为cls 绑定类的方法,类能使用,对象也可以使用,但是参数依然是类。 @staticmethod什么都不绑定,非绑定方法,定义了普通的函数。 # 非绑定方法 # 非绑定方法或叫做静态方法,就是既不需要访问类中的数据,也不需要访问对象的数据。 语法:@staticmethod 练习:为学生类添加一个save方法 一个get方法 save是将对象存储到文件中 get是将文件中获取对象 import os import pickle import time class Student: def __init__(self, name): self.name = name def say_hi(self): print(f'hello my name is {self.name}') def save_file(self): # 将对象存储到文件中 with open(self.name, 'wb') as fw: pickle.dump(self, fw) @staticmethod def read_file(name): # 从文件中获取对象 with open(name, 'rb') as fr: obj = pickle.load(fr) return obj stu = Student("rose") # 实例化对象rose stu.save_file() # 将rose保存到文件中 stu1 = Student("nick") # 实例化对象nick stu1.save_file() # 将nick保存到文件中 obj = Student.read_file("rose") # 从文件中读取获取对象rose print(obj.name) # 打印rose对象的名字属性 obj = Student.read_file('nick') # 从文件中获取对象nick print(obj.name) # 打印nick对象的名字 print(Student.__name__) # 打印类名 python2中类属性调用的方法 对象的绑定方法:没有加任何装饰器的方法就是对象的绑定方法 类的绑定方法:加了@classmethod装饰器的方法就是类的绑定方法 非绑定方法:加了staticmethod装饰器的方法就是非绑定方法,其实就是一个普通的函数。 转载于:https://www.cnblogs.com/zuihoudebieli/p/11241114.html
相关 面向对象编程 介绍 OOPs代表面向对象编程,这是一种编程范式,它使用对象和类来表示现实世界的实体及其行为。 OOP 的主要概念是将数据和处理该数据的函数作为一个单元绑定在一起,这样代 缺乏、安全感/ 2024年03月22日 18:06/ 0 赞/ 85 阅读
相关 面向对象编程 目录 面向对象编程 自定义类型 方法 组合 接口 接口变量值的类型 嵌入interface 练习题 实验总结 -------------------- 深碍√TFBOYSˉ_/ 2024年03月22日 08:41/ 0 赞/ 101 阅读
相关 面向对象编程 1. 面向对象概念 1.1 什么是对象 对象是相关状态和行为的包装,软件对象通常用于对日常生活中找到真实对象进行建模。 对象是理解面向对象技术的关键。看看周围,你 小咪咪/ 2023年01月23日 08:53/ 0 赞/ 69 阅读
相关 面向对象编程 函数的另一种形式 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ib 怼烎@/ 2022年11月13日 06:23/ 0 赞/ 296 阅读
相关 面向对象编程 面向对象编程 > 一切皆对象,面向对象编程特点封装、继承、多态 javascript的面向对象编程与其他的OOP语言不同,因为JS里没有类(class)的概念,什么是类,可 柔光的暖阳◎/ 2022年07月13日 09:49/ 0 赞/ 312 阅读
相关 面向对象编程 面向对象编程 概述: 面向对象本身就是一种方法;一种对现实世界理解和抽象的方法。也是一种更加符合人类的思想习惯的思想,将复杂问题简单化,将我们从执行者变成了指 小咪咪/ 2022年02月17日 05:27/ 0 赞/ 438 阅读
相关 面向对象编程 面向对象分为‘类’和‘实例’ 什么是类?类是对象的类型模版;例如Student,我们可以把它当做学生类型;它不具体代表某个学生; 什么是实例?实例是根据类型模版生成的对象; 矫情吗;*/ 2022年02月02日 05:21/ 0 赞/ 450 阅读
相关 面向对象编程,面向切面编程,面向过程编程 面向过程编程 面向过程编程(POP): 面向过程编程是以过程为中心的编程思想,从而分析解决问题所需要的步骤,然后编写函数来实现这些步骤,再依次调用这 一时失言乱红尘/ 2022年01月23日 07:13/ 0 赞/ 573 阅读
相关 面向对象编程 面向对象编程 面向过程编程:核心是过程,过程是一步一步的。先干啥,后干啥。 对扩展性要求较低的程序例如:系统内核,git,计算器,等等。 优点:逻辑清晰,复杂问 向右看齐/ 2021年11月02日 04:02/ 0 赞/ 570 阅读
还没有评论,来说两句吧...