Первое, что я вижу неправильно, это то, что вы пытаетесь вызвать класс «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!
>>>