初识面向对象
Posted zahngyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识面向对象相关的知识,希望对你有一定的参考价值。
今日内容
1 面向对象介绍
2 类的定义
3 属性的写法
4 初始化对象的属性
5 初始化方法的其他用处
6 如何为类定制行为
7 什么是绑定方法或非绑定方法(简介)
一 面向对象的介绍
在说面向对象编程之前简单的说一下面向过程的编程
关注的核心是过程,过程是就是一步一步的执行步骤,既先干啥在干啥
优点:逻辑清晰 , 复杂问题简单化,流程化
缺点: 扩展性差,可维护性差
使用场景:
对扩展性要求较低的程序例如:系统内核,git,计算器
记住:不是所有程序都要面向对象,得分析具体需求
1.什么是面向对象:
面向对象是一种编程思想:面向 朝着,向着
2.对象是什么:
面向对象的关注点是对象,把你的思维方式从具体操作变成了指挥者
注意: 对象不是凭空出现的,需要我们自己先去设计对象,然后在使用对象
3.面向的对象的优点和缺点:
· 优点: 不需要再关注具体的实现细节,可以更好的关注业务逻辑,扩展性提高了,维护性高,复用性高
缺点: 对比面向对象的编程而言,程序需要先设计,结构更复杂,编程复杂度提高了,你也无法预知执行结果
什么是对象:
世间万物都是对象
对象:具备某种特征与行为的结合体,并且是具体存在的称之为对象
类: 某些具备相同特征和相同行为的结合体,是一种抽象的概念
类型 == 类,比如说 动物,够
特征 == 属性
行为 == 技能
那么对象和类的关系(它们的关系分为在生活中和在代码中):
在生活中:先有对象在有类
在代码中: 必须现有类,才能产生对象(因为你要提前告诉计算机这个对象是什么样的,有什么样的技能)
二 类的定义
1. 定义类的语法
class 类的名称: 类中的内容 描述属性和技能 描述属性用变量 描述行为用函数 类名称 书写规范 首先是见名知意 名称是大驼峰命名法 驼峰就是单词首字母大写 , 大驼峰是第一个字母大写,小驼峰是第一个字母小写
2. 定义对象的语法
class Person: pass 创建对象 p = Person
三 属性的写法:
属性如何来书写:
1.属性可以写在类中:类中的属性,是所有对象的公共的
2.也可以写在对象中:对象中的属性,是每个对象独有的(不一样的)
注意:
如果类中和对象中存在同样的属性,先访问对象中的,没有在访问类中的
案例:描述一个老师类,需要包含一个公共属性和一个独特的属性
1 class Teacher: 2 school = "oldboy" 3 4 t1 = Teacher() 5 t1.name = "jack" 6 t1.age = 28
3.属性的增删改查方法
1 增加属性 2 对象变量名称.属性名称 = 属性值 3 4 删除属性 5 del 对象的变量名称.属性名称 6 7 修改 8 对象.属性 = 新的值 9 10 查看属性 访问的是对象的所有属性 11 print(对象.__dict__) 12 13 访问对象的类信息 14 print(对象.__class__)
四 初始化对象的属性
就是—init—方法
叫做初始化方法,本质上就是一个函数
特点1: 当实例化 对象时,会自动执行init方法
特点2:会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改
特点3:该函数不允许有返回值
功能:用户给对象赋初始值
案例:创建一个类具备几个属性,通过初始化方法来给他设置属性
1 class Teacher: 2 school = ‘oldboy‘ 3 4 def __init__(self,name,age): 5 print(self) 6 self.name = name 7 self.age = age 8 9 10 t1 = Teacher(‘zy‘,19) 11 print(t1.name,t1.age) 12 print(t1)
五 初始化函数的其他用处
1.初始化函数不仅仅用于赋值
可以处理赋值以外的初始化操作
案例:
1 class PC: 2 def __init__(self,kind,price,sys): 3 self.kind = kind 4 self.price = price 5 self.sys = sys 6 # 处理赋值以外的初始化操作,比如启动Bios啥的 7 print(‘启动BIOS‘) 8 print(‘启动系统分区‘) 9 print(‘加载系统界面‘) 10 print(‘启动成功‘) 11 12 p = PC(‘apple‘,15000,‘ios‘) 13 14 print(p.kind,p.price,p.sys)
六 如何为类定制行为
案例:
1 class Student: 2 school = ‘oldgirl‘ 3 4 def __init__(self,name,age,gender): 5 self.name = name 6 self.age = age 7 self.gender = gender 8 9 def say_hi(self): 10 print(‘hello i am a student my name is %s my age is %s my sex is %s‘ 11 % (self.name,self.age,self.gender)) 12 13 14 stu1 = Student(‘ZY ‘,19,‘male‘) 15 print(stu1.say_hi()) 16 17 Student.say_hi(stu1) 18 19 stu1.say_hi()
七 什么是绑定方法或非绑定方法
绑定方法分为绑定类 和 绑定对象
1.绑定对象的方法:
在类中定义的函数默认都是绑定到对象的方法,但是参数第一个必须是self,表示当前对象本身,使用对象来调用,调用时会自动传入对象
2.绑定到类的方法:用classmethod装饰器
参数第一个必须是cls表示当前类本身,使用类名来调用,调用时会自动传入类
3.非绑定方法:用staticmethod装饰器
不与类或对象绑定,类和对象都可以调用,但是没有自动传值这么一说,就是一个普通函数
4.绑定到类的方法与绑定到对象的方法总结:
异同点:
相同点:绑定对象调用时都有自动传值的效果,绑定到谁就由谁来使用
不同点:绑定到类的方法自动传入当前类,绑定到对象的方法自动传入当前对象
注意:绑定方法中 self ,cls 可以用其他的,但是约定俗成用这个
案例:绑定到类的方法
1 class OldBoyStudent: 2 school = ‘oldboy‘ 3 def __init__(self,name): 4 self.name = name 5 6 @classmethod # 类绑定方法 7 def show_school(cls): 8 print(cls.school) 9 10 OldBoyStudent.show_school()
案例:绑定到对象的方法(默认就是绑定给对象)
1 class OldBoyStudent: 2 school = ‘oldboy‘ 3 def __init__(self,name): 4 self.name = name 5 6 7 def show_school(self): 8 print(self.school) 9 10 p = OldBoyStudent(‘zy‘) 11 12 p.show_school()
总结:最后来做一个小练习吧
案例:为学生类中添加一个save方法,一个get方法,save是将对象存储到文件中,get 是从文件中获取对象
1 import pickle 2 3 class Student: 4 def __init__(self,name): 5 self.name = name 6 7 def say_hi(self): 8 print(‘my name is %s‘%(self.name)) 9 10 def save(self): 11 with open(self.name,‘wb‘) as f: 12 pickle.dump(self,f) 13 14 @staticmethod 15 def get(name): 16 with open(name,‘rb‘) as f: 17 obj = pickle.load(f) 18 return obj 19 20 21 stu = Student(‘zy‘) 22 stu.save() 23 24 obj = Student.get(‘zy‘) 25 print(obj.name)
以上是关于初识面向对象的主要内容,如果未能解决你的问题,请参考以下文章