一、什么是面向对象编程?
面向对象编程是一种以"对象"为中心的编程思想。它把数据(属性)和操作数据的行为(方法)封装在一起,形成一个独立的单元------对象。多个相似的对象可以归为一类,从而实现代码的重用和模块化。
OOP 的四大基本特征是:
- 封装(Encapsulation)
- 继承(Inheritance)
- 多态(Polymorphism)
- 抽象(Abstraction)
本文主要介绍最基础的部分:类、对象、属性、方法和构造函数。
二、类(Class)与对象(Object)
1. 类是什么?
类(Class) 是创建对象的"蓝图"或"模板"。它定义了一组具有相同属性和行为的对象的结构。
举个例子:我们可以定义一个 Person(人)类,描述所有人的共同特征,比如姓名、年龄,以及行为如说话、走路等。
class Person:
pass # 表示暂时不写内容
2. 对象是什么?
对象(Object) 是类的具体实例。你可以根据类创建多个对象,每个对象拥有自己的数据。
例如,从 Person 类中可以创建两个对象:小明 和 小红。
xiaoming = Person()
xiaohong = Person()
此时,xiaoming 和 xiaohong 就是 Person 类的两个不同对象。
三、属性(Attributes)
属性是对象所拥有的数据,用来描述对象的状态。
1. 实例属性
实例属性是每个对象独有的。比如每个人的姓名、年龄都可能不同。
我们可以在类中通过构造函数来初始化这些属性。
class Person:
def init(self, name, age):
self.name = name # 实例属性:姓名
self.age = age # 实例属性:年龄
注意:
self表示当前对象本身。self.name意味着"这个对象的 name 属性"。
创建对象时传入参数:
xiaoming = Person("小明", 18)
xiaohong = Person("小红", 16)
print(xiaoming.name) # 输出:小明
print(xiaohong.age) # 输出:16
四、方法(Methods)
方法是对象可以执行的操作,本质上是定义在类中的函数。
1. 实例方法
实例方法用于操作对象的数据,第一个参数必须是 self。
class Person:
def init(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"你好,我叫{self.name},今年{self.age}岁。")
def have_birthday(self):
self.age += 1
print(f"{self.name}过生日了!现在{self.age}岁了。")
调用方法:
xiaoming = Person("小明", 18)
xiaoming.greet() # 输出:你好,我叫小明,今年18岁。
xiaoming.have_birthday() # 输出:小明过生日了!现在19岁了。
五、构造函数(Constructor)
构造函数是在创建对象时自动调用的特殊方法,用于初始化对象的属性。
在 Python 中,构造函数是 __init__ 方法(前后各有两个下划线)。
def init(self, name, age):
self.name = name
self.age = age
当执行 Person("小明", 18) 时,Python 会自动调用 __init__ 方法,并将 "小明" 和 18 分别赋值给 name 和 age。
构造函数不是必须的,但强烈建议使用它来确保对象创建时具有合理的初始状态。
六、完整示例:学生类
让我们综合以上知识,创建一个更实用的例子:Student 类。
class Student:
构造函数:初始化属性
def init(self, name, student_id, grade=0):
self.name = name
self.student_id = student_id
self.grade = grade
方法:显示学生信息
def show_info(self):
print(f"学生姓名:{self.name}")
print(f"学号:{self.student_id}")
print(f"成绩:{self.grade}")
方法:设置成绩
def set_grade(self, new_grade):
if 0 <= new_grade <= 100:
self.grade = new_grade
print(f"成绩已更新为 {new_grade}")
else:
print("成绩必须在 0 到 100 之间!")
方法:判断是否及格
def is_passing(self):
return self.grade >= 60
使用示例
s1 = Student("张三", "S001", 85)
s1.show_info()
s1.set_grade(90)
print("是否及格?", s1.is_passing()) # 输出:True
七、总结
| 概念 | 说明 |
|---|---|
| 类(Class) | 创建对象的模板,定义属性和方法 |
| 对象(Object) | 类的实例,具体的存在 |
| 属性(Attribute) | 对象的数据,如名字、年龄 |
| 方法(Method) | 对象的行为,即类中的函数 |
构造函数 (__init__) |
创建对象时自动调用,用于初始化属性 |
八、学习建议
- 多动手实践 :尝试自己定义一些简单的类,比如
Car、Dog、Book。 - 从生活建模:思考现实中的事物如何转化为类和对象。
- 循序渐进:掌握基础后,再学习继承、多态等高级特性。