您好我是python的新手,我遇到了一个问题,弄清楚我的代码出了什么问题以及为什么单元测试失败了?下面是运行测试时的代码,单元测试和错误消息:
legs = []
stomach = []
class Centipede(object):
def __init__(self):
def __str__(self):
return ','.join(self.stomach)
def __call__(self,*args):
[self.stomach.append(arg) for arg in args]
#self.stomach.append(args)
def __repr__(self):
return ','.join(self.legs)
def __setattr__(self, key, value):
print("setting %s to %s" % (key, repr(value)))
if key in ([]):
self.legs.append(key)
#self.__dict__[key] = value
object.__setattr__(self, key,value)
单元测试代码
import unittest
from centipede import Centipede
class TestBug(unittest.TestCase):
def test_stomach(self):
ralph = Centipede()
ralph('chocolate')
ralph('bbq')
ralph('cookies')
ralph('salad')
self.assertEquals(ralph.__str__(), 'chocolate,bbq,cookies,salad')
def test_legs(self):
ralph = Centipede()
ralph.friends = ['Steve', 'Daniel', 'Guido']
ralph.favorite_show = "Monty Python's Flying Circus"
ralph.age = '31'
self.assertEquals(ralph.__repr__(),'<friends,favorite_show,age>' )
if __name__ == "__main__":
unittest.main()
运行测试时生成错误消息:
AttributeError: 'Centipede' object has no attribute 'legs'
AttributeError: 'Centipede' object has no attribute 'stomach'
答案 0 :(得分:5)
将腿和胃移入蜈蚣。 (我一直想说:))
class Centipede(object):
def init(self):
self.stomach=[]
self.legs=[]
答案 1 :(得分:1)
在使用之前永远不会设置self.legs。你确定你并不是指没有“自我”部分的“腿”,因为你有一个你不使用的名为leg的全局变量吗?
答案 2 :(得分:1)
你已经在课堂外宣布腿和胃 - 拉尔夫不知道他们应该属于他。
在class
行之后放置腿部和腹部并将它们缩进与__init__
相同的量应该会让你向前移动。