- 作者:老汪软件技巧
- 发表时间:2024-08-27 07:02
- 浏览量:
一、面向对象与面向过程
面向对象编程(Object-Oriented Programming,简称OOP)和面向过程编程(Procedural Programming,简称PP)是两种不同的编程范式。
面向对象编程强调把问题分解成对象,通过封装、继承和多态等机制,来处理对象之间的关系。每个对象都可以独立地处理自己的数据和行为,而不需要依赖其他对象。面向对象编程更加注重代码的重用性、可维护性和可扩展性,适用于大型、复杂的软件系统开发。
而面向过程编程则是一种以过程为中心的编程方式,它将问题分解成一系列的步骤,然后按照顺序执行这些步骤,以达到求解问题的目的。在面向过程编程中,数据和操作是分离的,函数是处理数据的主要手段。面向过程编程更加注重效率和速度,适用于小型、简单的程序或者性能要求较高的场景。
1、什么是面向过程?
面向过程:问题分解成一系列的步骤,然后按照顺序执行这些步骤举个简单的例子相信大家都被问过这样一个问题: 把大象装入冰箱需要几步?
按照面向过程的思想:需要三步第一步:打开冰箱第二步:把大象塞进去第三步:关上冰箱
从这里就可以看出:面向过程就是把一件事按步骤一步一步来实现
代码实现:
# 第一步:打开冰箱门
def open_door():
print("打开冰箱门")
# 第二步:把大象放进去
def put_elephant():
print("把大象放进去")
# 第三步:关闭冰箱门
def close_door():
print("关闭冰箱门")
# 完成三个步骤
def put_elephant_in_fridge():
open_door()
put_elephant()
close_door()
# 测试程序
put_elephant_in_fridge()
这就是面向过程代码的具体实现啦
2、什么是面向对象?
对象:就是对问题中的事物的抽象对象可以说是对现实事物的一种抽象映射。面向对象:就是把现实中的事物都抽象为“对象”。每个对象是唯一的,且都可以拥有它的属性与行为。我们就可以通过调用这些对象的方法、属性去解决问题。
按照面向对象的思想
在这个例子中:我们可以把大象看作一个对象,冰箱看作一个对象。冰箱的一些功能:开门、装物体、关门
class Elephant: # 大象类
def Eat(self): # 吃
print('吃')
class Fridge: # 冰箱类
def open_door(self): # 打开冰箱门
print('打开冰箱门')
def Put_In(self): # 放入东西
print('放入东西')
def close_door(self): # 关闭冰箱门
print('关闭冰箱门')
在面向对象中,每个对象是独立的,有属于它自己的功能,只需要专心实现自己的功能就好。所以在建立对象模型阶段,仅仅关注对象有什么的功能,但不考虑如何实现这些功能。
面向对象对象的特点:有很好的延展性,比如我给大象赋予了一个吃的功能,它通过调用就可以在冰箱里去吃东西。面向对象就是把现实问题抽象为对象,通过调用每个对象的属性或功能去解决问题。
二、类与对象1. 初识对象
什么是对象?对象是面向对象编程中的一个概念,它是类的一个实例化(即具体化)的结果。对象是具体的、实际存在的,可以在程序中被创建、操作和销毁。面向对象编程中,对象是由属性 和方法组成的。属性表示对象的状态和特征,方法表示对象可以执行的操作和行为。每个对象都属于某个类,类是对象的抽象,它定义了对象所具有的属性和方法的结构和行为。对象通过实例化类来创建,并且可以根据类的定义进行属性和方法的访问和调用。
以下是一个简单的示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, 我叫 {self.name}.")
# 创建两个Person对象
person1 = Person("张三", 25)
person2 = Person("李四", 30)
# 调用对象的方法
person1.say_hello() # 输出: Hello, 我叫张三.
person2.say_hello() # 输出: Hello, 我叫李四.
通过创建对象,我们可以根据类的定义来操作和管理数据,并执行对象所具有的行为。
2. 类的成员方法2.1 类的定义和使用
在python中,用关键字class来定义类
# 定义一个带有成员方法的类
class Student:
# 成员变量
name = None # 学生的姓名
# 定义方法
def say_hi1(self):
print(f'大家好,我叫{self.name}') # 成员方法中访问成员变量必须要用self关键字!
def say_hi2(self, msg):
print(f'大家好,我是{self.name},{msg}') # msg为外部传入的不需要用self!
stu1 = Student()
stu1.name = '张三'
stu1.say_hi1()
stu2 = Student()
stu2.name = '李四'
stu2.say_hi2('请多多关照')
运行结果:
可以看出,在类中:
其中:
2.2 成员方法
语法:在类中定义成员方法和定义函数基本一致,只存在细微区别:
注意:self关键字是成员方法定义的时候,必须填写的。
例如:
class Student:
# 成员变量
name = None # 学生的姓名
# 定义方法
def say_hi(self):
print(f'大家好,我叫{self.name}')
class Student:
# 成员变量
name = None # 学生的姓名
def say_hi(self, msg):
print(f'大家好,{msg}') # msg为外部传入的不需要用self!
stu = Student()
stu.say_hi('请多多关照')
可以看到,在传入参数的时候,没有传入self,但也没有报错。
3. 类和对象
基于类创建对象的语法:
对象名 = 类名称()
为什么非要创建对象才能使用呢?
类只是一种程序内的“设计图纸”或者摸具,需要基于图纸或摸具生产实体(对象),才能正常工作这种套路,称之为:面向对象编程
举一个简单的例子:类就相当于是闹钟的设计图纸,而对象就相当于按照闹钟的设计图纸所生产出来的闹钟。
从上面可以看出,设计出来的类包含编号和价格,具有响铃的功能。而基于类所创建的对象也有对应的编号和价格所以面向对象编程就是设计类,基于类创建对象,由对象做具体的工作。
4. 魔法方法
内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法常见的魔法方法:
魔法方法描述
_ _ init _ _(self, ...)
初始化方法,用于初始化对象的属性,在对象创建时调用。
_ _ str _ _(self)
将对象转换为字符串的方法,可以通过str(obj)或print(obj)来触发,返回对象的可读性好的字符串表示。
_ _ repr _ _(self)
将对象转换为供解释器读取的形式的字符串,通常用于调试和开发,可以通过repr(obj)来触发。
_ _ len _ _(self)
返回对象的长度,可以通过len(obj)来调用。
_ _ getitem _ _(self, key)
获取对象的索引值,用于支持索引操作,如obj[key]。
_ _ setitem _ _(self, key, value)
设置对象的索引值,用于支持赋值操作,如obj[key] = value。
_ _ delitem _ _(self, key)
删除对象的索引值,用于支持删除操作,如del obj[key]。
_ _ iter _ _(self)
返回一个迭代器,用于支持对象的迭代功能,如在for循环中使用。
_ _ next _ _(self)
用于迭代器,返回迭代对象的下一个元素。
_ _ eq _ _(self, other)
定义对象相等的比较方式,通常用于==操作符的比较。
_ _ lt _ _(self, other)
定义对象小于的比较方式,通常用于