本文共 2261 字,大约阅读时间需要 7 分钟。
本节将介绍 class 语句的使用以及如何通过类创建新对象。
面向对象编程是一种将代码组织成对象集合的编程技术。一个对象通常包括以下几个方面:
x 和 y。move() 和 damage()。在本课程中,你已经使用了面向对象编程技术。例如,操作列表 nums 是一个列表的实例,其方法 append() 和 insert() 被绑定到该实例上。
使用 class 语句定义一个新的对象类。以下是一个简单的 Player 类示例:
class Player: def __init__(self, x, y): self.x = x self.y = y self.health = 100 def move(self, dx, dy): self.x += dx self.y += dy def damage(self, pts): self.health -= pts
类是一个函数的模板,用于创建实例。类定义本身不会执行任何操作,它只是一个蓝图。
实例是你在程序中操作的具体对象。通过调用类来创建实例:
a = Player(2, 3)b = Player(10, 20)
a 和 b 都是 Player 类的实例,它们各自拥有一组数据和行为。
每个实例都有自己的局部数据。这些数据通过 __init__() 方法初始化:
class Player: def __init__(self, x, y): self.x = x # 实例数据 self.y = y self.health = 100
实例可以随时访问它们的属性,如 a.x 和 b.x。
实例方法是应用于对象实例的函数。例如,Player 类的 move() 方法:
a.move(1, 2)
方法会将 self 作为第一个参数传递。self 通常用来表示当前对象实例。
类未定义名称的作用域。例如,Player 类中的 move() 方法可以调用类中的另一个方法 self.move():
def move(self, dx, dy): self.x += dx self.y += dy self.move(-amt, 0)
通过 self 可以显式地引用实例。
在本节的前面部分,我们使用元组和字典表示数据。为了更好地组织代码,我们可以定义一个 Stock 类。以下是一个 Stock 类的示例:
class Stock: def __init__(self, name, shares, price): self.name = name self.shares = shares self.price = price def cost(self): return self.shares * self.price def sell(self, shares): self.shares -= shares
创建多个 Stock 实例并对它们进行操作:
a = Stock('GOOG', 100, 490.10)b = Stock('AAPL', 50, 122.34)c = Stock('IBM', 75, 91.75)stocks = [a, b, c]for s in stocks: print(f"{s.name} {s.shares} {s.price}") 输出应为:
GOOG 100 490.10AAPL 50 122.34IBM 75 91.75
给 Stock 类添加 cost() 和 sell() 方法:
a = Stock('GOOG', 100, 490.10)a.cost() # 49010.0a.sell(25)a.cost() # 36757.5 从文件中读取股票数据并创建实例列表:
import fileparsewith open('Data/portfolio.csv') as lines: portdicts = fileparse.parse_csv(lines, select=['name', 'shares', 'price'], types=[str, int, float])portfolio = [Stock(d['name'], d['shares'], d['price']) for d in portdicts] 计算总费用:
total_cost = sum(s.cost() for s in portfolio)print(total_cost) # 44671.15
修改 report.py 中的 read_portfolio() 函数,使用 Stock 实例而不是字典。修改后的代码应能正确读取并处理股票数据。
通过这些练习,你将掌握如何通过类定义对象,并为对象添加方法来管理数据。
转载地址:http://qxgkz.baihongyu.com/