Python
中的面向对象编程(Object-Oriented Programming
, OOP
)是一种编程范式(paradigm
),它通过类和对象的概念来组织代码,使代码更具模块化、可重用性和可扩展性。
比如:一只小猫就是一个对象
- 属性:毛色、名字、年龄
- 行为:喵喵叫、跳跃、吃饭
1. 面向对象编程的核心概念
面向对象编程的核心概念在于类和对象
类:模具的说明书,比如汽车类
、动物类
、学生类
对象:就像通过模具的说明书制造的实际汽车,每一辆车都是一个对象。
类 Class
- 类是创建对象的模板或蓝图,用来定义对象的属性和行为
- 使用关键字
class
定义类
对象 object
- 对象是类的实例或实体,是类实际创建出来的实体。
- 对象包含了属性和方法
2. 创建第一个类:人物类
定义类
class Person:
pass
创建对象
person1 = Person()
person2 = Person()
类就是模板Model
, person1
和 person2
是由这个Model
创建的对象
为类添加属性
类的属性(Class Attributes) 是指类内部定义的变量,它可以被类的所有对象(object
<实例instance
>)共享。对于一个Person
来说,它需要有的具体属性有名字、年龄等。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
__init__
是类的构造方法(constrctor
), 用于在类的对象被创建时自动调用,完成对象的初始化操作。init
是initialize
的缩写。self
表示这个对象本身, 主要作用是允许类的对象访问和修改对象的属性。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Nice to meet you. My name is {self.name} and I'm {self.age} years old.")
示例
题目 1:计算圆的属性
要求:
创建一个类 Circle
,用来表示一个圆。该类应包含以下功能:
- 初始化方法,接受半径作为参数。
- 一个方法
area()
,返回圆的面积(用math.pi
)。 - 一个方法
circumference()
,返回圆的周长。
提示:
使用 random.randint()
生成随机数。
from math import pi
class Circle:
def __init__(self, radius):
self._radius_ = radius
def area(self):
a = pi * self._radius_ * self._radius_
return a
def circumference(self):
return 2 * pi * self._radius_
题目 2:计时器类
要求:
创建一个类 Timer
,实现以下功能:
- 初始化方法,不需要参数。
- 一个方法
start()
,记录当前时间为开始时间。 - 一个方法
stop()
,记录当前时间为结束时间,并计算间隔时间。 - 一个方法
elapsed()
,返回计时器运行的总时长,单位为秒。
提示:
使用 time.time()
获取当前时间戳。
import time
class Timer:
def __init__(self):
self.stime = 0
self.etime = 0
self.duration = 0
def start(self):
self.stime = time.time()
def stop(self):
self.etime = time.time()
self.duration = self.etime - self.stime
def elapsed(self):
return self.duration
t = Timer()
t.start()
time.sleep(2)
t.stop()
print(t.elapsed())
题目 3:倒计时工具
要求:
创建一个类 Countdown
,实现一个简单的倒计时功能:
- 初始化方法,接受倒计时的秒数作为参数。
- 一个方法
start()
,从指定的秒数开始倒计时到 0,每秒打印当前剩余秒数(用time.sleep(1)
)。 - 倒计时结束后打印
"Time's up!"
。
提示:
使用 time.sleep()
来暂停 1 秒。
import time
class Countdown:
def __init__(self, sec):
self.second = sec
def start(self):
for i in range(self.second, -1, -1):
print(i)
time.sleep(1)
print("Time's up!")