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
,但它给出了错误(如上所述)
答案 0 :(得分:1)
除了从对象内部无法访问的“私有”实例变量在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。因为我们无法访问以__(双下划线)开头的变量。