You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pytest导入类失败,PyCharm中导入项呈灰色

pytest导入类失败+PyCharm导入内容灰色问题解决

问题情况

尝试导入类用pytest开展测试一直失败,PyCharm中导入的内容呈灰色状态,不清楚原因。

测试代码

from classes import *

class Test:
    def setup_method(self):
        self.tv1 = power(True)

    def teardown_method(self):
        del self.tv1

    def test_power(self):
        assert power(True) is True
        assert power(False) is False

PyCharm灰色显示截图

PyCharm中导入内容灰色显示

类文件(classes.py)部分代码

class Television:
    """
    为遥控器对象构建功能的类

    各函数使用的全局变量
    :param MIN_CHANNEL: 频道不能低于此值
    :param MAX_CHANNEL: 频道不能高于此值
    :param MIN_VOLUME: 音量不能低于此值
    :param MAX_VOLUME: 音量不能高于此值
    """

    MIN_CHANNEL = 0
    MAX_CHANNEL = 3

    MIN_VOLUME = 0
    MAX_VOLUME = 2

    def __init__(self) -> None:
        """
        构造函数,初始化电视对象的初始状态
        :param channel: 存储频道号的变量
        :param volume: 存储音量等级的变量
        :param status: 存储电视开关状态的变量
        """

        self.__channel = Television.MIN_CHANNEL  # 创建私有变量存储电视频道,默认设为最小频道
        self.__volume = Television.MIN_VOLUME    # 创建私有变量存储电视音量,默认设为最小音量
        self.__status = False                   # 创建私有变量存储电视状态,电视初始为关闭状态

    def power(self) -> None:
        """
        切换电视开关状态的方法
        :return: 电视的开关状态
        """

        if self.__status == False:              # 此方法用于切换电视开关
            self.__status = True               # 如果电视当前是关闭状态,调用后打开
        else:
            self.__status = False               # 如果电视当前是打开状态,调用后关闭

问题原因和修复方案

1. PyCharm导入内容灰色的原因

你用from classes import *导入了Television类,但测试代码里根本没用到这个类,PyCharm会把未使用的导入标记为灰色,提示这部分代码没起作用。

2. 测试代码的核心错误

  • 错误1:直接调用实例方法power()
    power是Television类的实例方法,必须先创建Television的实例,才能调用这个方法,不能直接像普通函数那样调用power(True)。
  • 错误2:power方法无返回值
    类里的power方法返回类型是-> None,它只是切换私有变量__status的值,不会返回布尔值,所以assert power(True) is True完全不成立。
  • 错误3:setup_method里的实例化错误
    self.tv1 = power(True)是错误写法,应该先实例化Television对象,再调用它的power方法。

3. 修正后的测试代码

from classes import Television

class TestTelevision:
    def setup_method(self):
        self.tv = Television()  # 正确实例化Television对象

    def test_power_toggle(self):
        # 初始状态是关闭
        assert not self.tv._Television__status  
        
        # 调用power方法打开电视
        self.tv.power()
        assert self.tv._Television__status is True
        
        # 再次调用power方法关闭电视
        self.tv.power()
        assert self.tv._Television__status is False

额外建议

  • 避免用from classes import *这种模糊导入,明确导入需要的类(比如from classes import Television),代码更清晰,也能避免命名冲突。
  • 给Television类添加公共的状态获取方法,更符合封装原则:
    def get_status(self) -> bool:
        return self.__status
    
    测试时就可以用self.tv.get_status()获取状态,不用依赖私有变量的名称修饰。

内容的提问来源于stack exchange,提问作者DoomDragoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:17:00