首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 中 setup_class() 和 init() 的区别与相同点

Python 中 setup_class() 和 init() 的区别与相同点

作者头像
大飞记Python
发布2026-04-14 20:26:19
发布2026-04-14 20:26:19
290
举报

很多小伙伴都有疑惑,在 Python 中,setup_class()__init__() 都是用于初始化的方法,但它们有什么不同的用途和使用场景呢?

相同点

  • 两者都用于初始化操作
  • 都在对象创建或测试执行前被调用

不同点

特性

__init__()

setup_class()

用途

普通类的构造函数

测试框架(pytest)中的类级别setup方法

调用时机

每次创建类的新实例时

在整个测试类执行前只调用一次

所属领域

面向对象编程

测试框架

参数

接收self作为第一个参数

接收cls作为第一个参数(类方法)

调用次数

每个实例一次

每个测试类一次

代码示例

代码语言:javascript
复制
import pytest

# 普通类使用 __init__()
class RegularClass:
    def __init__(self, value):
        self.value = value
        print(f"RegularClass initialized with value: {value}")
    
    def display(self):
        print(f"Value: {self.value}")

# 测试类使用 setup_class()
class TestExample:
    @classmethod
    def setup_class(cls):
        """在整个测试类执行前只运行一次"""
        cls.shared_resource = "Shared Data"
        print("Setup class - this runs once before any tests")
    
    def __init__(self):
        """注意:在pytest测试类中通常不定义__init__"""
        print("Test instance created")
    
    def test_method_1(self):
        print(f"Test method 1 using {self.shared_resource}")
        assertTrue
    
    def test_method_2(self):
        print(f"Test method 2 using {self.shared_resource}")
        assertTrue

# 演示代码
if __name__ == "__main__":
    print("=== 演示 RegularClass 的 __init__() ===")
    obj1 = RegularClass(10)
    obj2 = RegularClass(20)
    obj1.display()
    obj2.display()
    
    print("\n=== 演示 TestClass 的 setup_class() ===")
    # 注意:实际测试中pytest会自动调用setup_class()
    test_instance = TestExample()
    # 手动调用setup_class来演示
    TestExample.setup_class()
    test_instance.test_method_1()
    test_instance.test_method_2()

何时使用哪种方法

  • 在普通Python类中,使用__init__()来初始化实例属性
  • 在使用pytest进行测试时,使用setup_class()来进行测试类级别的初始化
  • 在unittest框架中,类似的类级别setup方法是setUpClass()

注意事项

  1. 在pytest测试类中,通常不需要定义__init__()方法
  2. setup_class()需要使用@classmethod装饰器
  3. setup_class()主要用于设置所有测试方法共享的资源

在实际工作应用中,我们通常是在创建普通Python函数时,使用__init__()初始化;但在设置Pytest自动化测试环境时,使用setup_class()进行初始化始化操作

如果觉得对你有帮助,不要忘记 点赞 分享 噢~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大飞记Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相同点
  • 不同点
  • 代码示例
  • 何时使用哪种方法
  • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档