面向过程 面向对象:
面向过程:—侧重于怎么做?
1.把完成某一个需求的 所有步骤 从头到尾 逐步实现
2.根据开发要求,将某些功能独立的代码封装成一个又一个函数
3.最后完成的代码,就是顺序的调用不同的函数
特点:
1.注重步骤和过程,不注重职责分工
2.如果需求复杂,代码变得非常复杂
3.开发复杂的项目的时候,没有固定的套路,开发难度很大
面向对象:----侧重于谁来做?
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
1.在完成某一个需求前,首先确定职责–要做的事(方法)
2.根据职责确定不同的对象,在对象内部封装不同的方法(多个)
3.最后完成代码,就是顺序的让不同的对象调用不同的方法
特点:
1.注重对象和职责,不同的对象承担不同的职责
2.更加适合对复杂的需求变化,是专门应对复杂项目的开发,提供固定的套路
3.需要在面向过程的基础上,再学习一些面向对象的语法
面向过程—>侧重于怎么做?
面向对象—>测中于谁来做?
区别与应用场景:
面向过程:复杂的问题流程化,简单化,侧重于怎么做
应用场景:不再需要扩展了,监测脚本,自动部署脚本,软件解压安装
面向对象:特征与技能的结合体 一切皆对象,侧重于谁来做
应用场景:用户需求经常变化,互联网应用,游戏,企业内部应用
面向对象有两个核心的概念
类:是一类具有相同特征或行为的事物的一个统称
对象:由类创建出来的一个具体的存在
类和对象的关系:先有类再有对象
类是模板 对象是根据这个模板创建出来的
类只需要有一个 对象可以有多个
类:属性(这一类事务的共同信息) 和 方法(你能完成的动作)
1.类名:这类事物的名字(大驼峰命名法)
大驼峰命名法:
1.每个单词的首字母大写
2.单词与单词之间没有下划线
2.属性:这个类创建出来的对象有什么特征
3.方法:这个类创建出来的对象有什么行为
类名的确定
名词提炼法分析整个业务流程,出现的名词,通常就是找到的类
属性和方法的确定
对 对象的特征描述,通常可以定义成属性
对象具有的行为(动词),通常可以定义为方法
提示:需求中没有涉及的属性或方法在设计类时,不需要考虑
类的属性和对象的属性的区别:
类的属性:数据属性和函数属性,数据属性是所有对象共有的,函数属性是绑定对象使用的
对象的属性:对象是类的实例化
类和对象在内存中是如何保存的
类是在定义阶段便生成命名空间,以字典形式保存。通过__dict__查看
对象以字典形式保存。
self:
哪一个对象调用的方法,self就是哪一个对象的引用;
在封装的方法内部,self就表示当前调用方法对象自己;
self.name :接受外部传递的参数。
# 定义一个猫类
class Cat:
def eat(self):
print('%s 爱吃鱼' %(self.name))
def drink(self):
print('小猫要喝水')
# 创建猫对象
# print(Cat())
tom = Cat()
tom.name = 'Tom'
print(tom.name)
print(tom)
tom.drink()
tom.eat()
初始化方法:
类名() 就可以创建一个对象
类名() 创建对象的时候,python解释器会自动执行以下操作
1.为对象在内存中分配空间–创建对象
2.调用初始化方法为对象的属性设置初始值
这个初始化方法是内置方法,是专门用来定义一个类据有哪些属性和方法的
class Cat:
def __init__(self, new_name):
# print('这是一个初始化方法')
self.name = new_name
def eat(self):
print('%s爱吃鱼' % (self.name))
def drink(self):
print('%s要喝水' % (self.name))
hello_kitty = Cat('hello_kitty')
print(hello_kitty)
hello_kitty.eat()
hello_kitty.drink()
tom = Cat('蓝猫')
tom.drink()
tom.eat()
如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造
1.把希望设置的属性值,定义成__init__方法的参数
2.在方法内部使用self.属性名 = 形参 接收外部传递的参数
3.在创建对象的时候,使用类名(属性)调用
str:在python中 使用print输出对象变量时候,默认情况下
会输出这个变量引用的对象是由哪一个类创建的对象以及在内存中的地址
如果在开发中,希望使用print输出变量的时候,能够打印自定义内容
就可以利用__str__这个内置的方法了
class Cat:
def __init__(self,name):
self.name = name
# def __str__(self):
# # 返回必须是一个字符串
# return '我是 %s