一.面向过程与面向对象
面向过程:1.根据业务逻辑从上到下写代码。
2.开发思路是将数据和函数按照执行的逻辑顺序组织在一起
3.分开考虑数据与函数
优点:复杂度的问题简单化、流程化
缺点:扩展性差,牵一发而动全身
特点:1.注重步骤与过程,不注重职责分工,关注点是怎么做
2.如果需求复杂,代码会变得很复杂
3.开发复杂项目,没有固定的套路,开发难度很大!
面向对象:1.将数据与函数绑定到一起
2.进行封装
3.更快速高效地开发程序
4.减少重复代码的重写过程
优点:可扩展性高
缺点:编程复杂度高,容易出现过度设计问题
特点:1.注重对象和职责,不同的对象承担不同的职责,关注点是谁来做。
2.更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路。
3.需要在面向过程基础上,再学习一些面向对象的语法。
二.类和对象
1.类和对象的定义
类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法,是抽象的,不能直接使用。
对象:通过类定义的数据结构实例,可以直接使用。由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。对象包括两个数据成员(类变量和实例变量)和方法。
2.类和对象的关系
1.类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。
2.使用同一个类,能够创建出很多对象。
3.类中定义了什么属性和方法,对象中就有什么属性和方法。
4.不同对象对应的属性值也会不同。
3.类的设计
设计一个类,通常需要满足三个要素:
1.类名:这类事物的名字,按照大驼峰命名法起名。
2.属性:这类事物具有什么样的特征。
3.方法:这类事物具有什么样的行为。
4.类和对象的简单语法格式
定义一个只包含方法的类,语法格式:
class 类名:
def 方法1(self,参数列表):# 方法里的第一个参数必须是self
pass
def 方法2(self,参数列表):
pass
创建对象,语法格式:
对象变量名 = 类名()
三.面向对象的基本语法
先用一个实例来解析:
class Student(object): # 关注Student类有哪些特征和行为
# 在 __init__ 方法里,以参数的形式定义特征,我们称之为属性
def __init__(self, name, age):
self.name = name
self.age = age
# 行为定义为一个个函数
def play_game(self):
print('正在打游戏')
def eat(self):
print('正在吃东西')
# 使用 Student 类创建了两个实例对象 s1,s2
# s1和s2都会有name,age属性,同时都有play_game和eat方法
s1 = Student('张三', 18) # Student() ==> 会自动调用 __init__ 方法
s2 = Student('李四', 17)
# 根据业务逻辑,让不同的对象执行不同的行为
s1.play_game()
s2.eat()
运行结果:
正在打游戏
正在吃东西
1.self语句的使用
谁对象调用了方法,方法里的self指的就是谁。通过 self.属性名 可以访问到这个对象的属性;通过 self.方法名() 可以调用这个对象的方法。
class Student(object):
def __init__(self, name):
self.name = name
def play_game(self):
print('{}正在玩游戏'.format(self.name))
s1 = Student('张三')
print(s1.name) #张三
s1.play_game() #张三正在玩游戏
s1=Student(‘张三’) 这段代码具体做了什么呢?
- 调用 new 方法,用来申请内存空间
- 调用 init 方法传入参数,将 self 指向创建好的内存空间,填充数据
- 变量 s1 也指向创建好的内存空间
2.给对象添加属性和修改
Python支持动态属性,当一个对象创建好了以后,可以直接使用 对象.属性名 = 属性值 就可以很方便的给对象添加或者修改一个属性。
直接使用等号给一个属性赋值,如果这个属性以前不存在,会给对象添加一个新的属性
class Student(object):
def __init__(self, name):
self.name = name
def play_game(self):
print('{}正在玩游戏'.format(self.name))
s1.age=18 #给对象添加一个age属性
print(s1.age) # 18
如果这个属性以前存在,会修改这个属性对应的值。
class Student(object):
def __init__(self, name):
self.name = name
def play_game(self):
print('{}正在玩游戏'.format(self.name))
s1 = Student('张三')
s1.name = '李四'
s1.play_game() #李四正在玩游戏
在日常开发中,不推荐在类的外部直接给对象添加属性这种方式。对象应该具有哪些属性,我们应该封装在类的内部。