我有两个班级:
class Dog(object):
def __init__(self, name):
self.name = name
class Toy(object):
def play(self):
print "Squeak!"
我需要为类Dog提出一个名为play(self,toy,n)的方法。它打印“Yip!”(带空格),然后输出同一行的toy.play输出。这种情况发生了n次,n个输出在不同的行上。如果n为负数,则与0相同。
我做的是
def play(self, toy, n):
count = 1
if n > 0:
while count <= n:
print "Yip! %s " % Toy().play()
count += 1
else:
print None
然而,当我打电话给狗('大')。玩(玩具,3)或其他什么时,它表明了这一点 吱! 伟业!没有 吱! 伟业!没有 吱! 伟业!没有 我不知道出了什么问题。尖叫!和叶!应该假设在同一条线上,而现在有分开,那里的顺序应该相反。为什么没有? 有人可以帮帮我吗?
答案 0 :(得分:1)
在您的示例通话Dog('big').play(0)
中,您不传递toy
参数 - 这就是它所抱怨的内容!在n
之前传递玩具参数,那会更好。
然后你可以开始解决你的play
实施中的错误:你为什么要制作一个新的玩具而不是使用这个论点,为什么你打印'None'
时这不是规范的一部分,如何你无用地打印Toy.play
方法的返回值(隐式地返回None
),而不是与后一种方法是print
的事实一起工作,并且永远不会增加count
然后以无限循环结束。
(我认为,八行中的四个严重错误加上一个通话中的一个必须是某种记录; - 。)。
BTW,家庭作业通常使用标记homework
进行标记,而不是exercise
。 (并且,你的Q标题还有一个错误,因为实际上没有classmethod,只是一个很好的旧平原和完全正常的实例方法。)
答案 1 :(得分:0)
我看到错误的第一件事是你试图调用类'Toy'而不是代表实例'toy'的变量传递给你'play'方法。我不相信你可以实例化一个类并同时调用它的一个方法,这就是'Toy()。play()'试图做的事情。另一个是我不太清楚我是否理解你要对你的课程设计做些什么。以下是我将如何实现这些类,然后使用它们来获得所需的行为。
class Toy(object):
def play(self):
return "Squeak!"
class Dog(object):
speak = 'Yip! %s'
def __init__(self, name, toy):
self.name = name
self.toy = toy
def play(self,n):
if n > 0:
for each in range(n):
print(self.speak % self.toy.play())
else:
print(None)
以下是我将如何使用它
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from toy import Toy, Dog
>>> spike = Dog("Spike",Toy())
>>> spike.play(3)
Yip! Squeak!
Yip! Squeak!
Yip! Squeak!
>>>