如何从其他文件类函数导入变量

时间:2019-05-15 04:49:22

标签: python

  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_manual中导入test_resouces.py的目录

我该怎么做。

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

2 个答案:

答案 0 :(得分:1)

根据Python docs

  

除了从对象内部无法访问的“私有”实例变量在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()

答案 1 :(得分:0)

我们无法访问__is_manual。因为我们无法访问以__(双下划线)开头的变量。