首页 > 解决方案 > 如何从不同的文件类函数导入变量

问题描述

  self.assertFalse(b.__is_manual) AttributeError: 'BaseResource' object has no attribute '_Resources__is_manual'

test_resources.py的是

class Resources(TestCase):
    def test_disable_manual_mode(self):
        self.assertFalse(b.__is_manual)
if __name__=='__main__':
    b = base.BaseResource()
    unittest.main()

base.py的是

class BaseResource(object):
    def __init__(self, index=0, parent=None, **kwargs):
        self.__is_manual = False
    def disable_manual_mode(self):
        self.__is_manual = False

两者都在我要导入的同一目录__is_manualtest_resouces.py

我该怎么做。

我已经尝试过b.__is_manual,但它给出了错误(如上所述)

标签: python

解决方案


根据Python 文档

在 Python 中不存在只能从对象内部访问的“私有”实例变量。但是,大多数 Python 代码都遵循一个约定:前缀为下划线的名称(例如 _spam)应被视为 API 的非公共部分(无论是函数、方法还是数据成员) . 它应被视为实施细节,如有更改,恕不另行通知。对象的实例化必须在测试类中。

将属性命名为 时__is_manual,您将其定义为“受保护”属性,您无法访问它。简化您的代码。

class BaseResource(object):
    def __init__(self, index=0, parent=None, **kwargs):
        self.is_manual = False

    def disable_manual_mode(self):
        self.is_manual = False

此外,对象的实例化必须在测试类中。

class Resources(TestCase):
    def test_disable_manual_mode(self):
        b = base.BaseResource()
        self.assertFalse(b.is_manual)

if __name__=='__main__':
    unittest.main()

推荐阅读