Skip to content

Python进阶:理解class(类)

为什么要学这个

在前面的课程中,你已经学了Python的基础知识:变量、列表、循环、函数。这些已经够用了——大多数时候

但在后面的量化策略开发中,你会看到一些代码用到了class(类)。它看起来像这样:

python
class MovingAverageStrategy:
    def __init__(self, short_window=5, long_window=20):
        self.short_window = short_window
        self.long_window = long_window

    def generate_signals(self, data):
        ...

第一次看到这种代码,你可能会想:"这是什么鬼?"

别慌。本文就是来帮你搞懂它的。而且你只需要看懂,不需要从零写——后面有现成的模板。


从生活类比开始

你已经学过的Python知识,可以这样对应:

Python概念生活类比说明
变量店名一个名字存一个值,如 shop_name = "小明的奶茶店"
列表菜单一堆东西放一起,如 menu = ["珍珠奶茶", "拿铁", "柠檬茶"]
函数做奶茶的步骤一段可复用的操作,如 def make_milk_tea(): ...
class一整家奶茶店把店名、菜单、做奶茶的步骤打包在一起

class就是"把相关的数据和操作打包在一起"的方式。


一个奶茶店的class

让我们用代码来开一家奶茶店:

python
# 定义一个"奶茶店"的模板(class)
class MilkTeaShop:
    # 这是"初始化"方法,开新店时执行一次
    def __init__(self, name, menu):
        self.name = name           # 店名
        self.menu = menu           # 菜单
        self.sales = 0             # 今日销售额

    # 卖一杯奶茶的方法
    def sell(self, drink_name, price):
        if drink_name in self.menu:          # 检查菜单上有没有
            self.sales += price              # 加上销售额
            return f"卖出了一杯{drink_name}{price}元"
        else:
            return f"抱歉,我们没有{drink_name}"

    # 查看今日营业额的方法
    def check_sales(self):
        return f"{self.name}今日营业额:{self.sales}元"

逐行解释:

  • class MilkTeaShop: — 告诉Python"我要定义一个叫MilkTeaShop的模板"
  • def __init__(self, name, menu): — 开新店时要做的事情(初始化)
  • self.name = name — 把传入的店名保存下来,self就是"这家店自己"
  • def sell(self, ...) — 定义一个"卖奶茶"的操作
  • self.sales += price — 在自己的销售额上加上这一单

用这个模板开两家店

python
# 用模板开第一家店
shop_a = MilkTeaShop("小明奶茶", ["珍珠奶茶", "拿铁"])
# 用模板开第二家店
shop_b = MilkTeaShop("小红奶茶", ["柠檬茶", "芒果冰"])

# 各卖几杯
print(shop_a.sell("珍珠奶茶", 15))    # 卖出了一杯珍珠奶茶,15元
print(shop_a.sell("拿铁", 18))         # 卖出了一杯拿铁,18元
print(shop_b.sell("柠檬茶", 12))       # 卖出了一杯柠檬茶,12元

# 查看营业额
print(shop_a.check_sales())  # 小明奶茶今日营业额:33元
print(shop_b.check_sales())  # 小红奶茶今日营业额:12元

看到没?同一个模板,可以创建不同的店,各自独立运营。


和投资的联系

为什么要用class来写量化策略?

奶茶店量化策略
模板(class)策略模板
店名、菜单策略名称、参数(如均线天数)
做奶茶的步骤计算信号的方法
开多家店用不同参数跑不同策略
python
# 量化策略中的class大概长这样
class MAStrategy:
    def __init__(self, short_days=5, long_days=20):  # 参数就像"配方"
        self.short_days = short_days
        self.long_days = long_days

    def run(self, stock_data):        # 运行策略就像"做奶茶"
        # 计算均线...
        # 生成买卖信号...
        pass

# 用同一套策略,不同参数,跑两只股票
strategy_a = MAStrategy(short_days=5, long_days=20)   # 短期参数
strategy_b = MAStrategy(short_days=10, long_days=30)  # 长期参数

就像你可以用同一个奶茶店模板开不同的店,你也可以用同一个策略模板跑不同的参数。


你需要掌握的程度

这里说清楚:你只需要看懂class在做什么,不需要从零写class。

具体来说:

程度要求说明
能看懂必须看到class代码能理解每个部分在做什么
能改参数必须知道怎么修改__init__里的参数
能从零写不需要后面有现成模板,复制改就行

就像你会开车,但不一定会造车。你会用奶茶店的点单系统,但不一定需要自己设计一个。


常见疑问

self是什么?

self就是"自己"——"这家店自己"或"这个策略自己"。每个实例有自己的self,互不干扰。

你可以理解为Python的self就像中文里的"本店":

  • self.name = "本店的名字"
  • self.sales = "本店的营业额"

__init__是什么?

__init__是"初始化"的意思,就是"创建新实例时自动执行的代码"。就像"新店开张时要做的事情"——挂招牌、准备菜单、清零收银机。

我一定要用class吗?

不一定。简单的事情用函数就够了。但在量化策略中,class的好处是:

  • 把策略的参数和数据打包在一起,不容易乱
  • 可以轻松创建多个策略实例
  • 代码组织更清晰

小结

概念说明
class一个模板,把数据和操作打包在一起
__init__初始化方法,创建实例时自动执行
self"自己",引用当前实例的数据和方法
实例用模板创建的具体对象,如"小明奶茶"
学习目标看懂 + 改参数,不需要从零写

💡 不用死记硬背class的语法。后面遇到具体的策略代码时,对照本文再看一遍,会有更深的理解。


下一篇:Python数据处理进阶

仅供学习交流,不构成任何投资建议