2

これは、関数を初めて呼び出すときに機能しますが、2回目にエラーメッセージが表示されます

mloc = pygame.mouse.get_pos()
if type == "gun":
    mTowers.add(gun(mloc))

...

 class gun(tower):    
     def __init__(self, place):
         tower.__init__(self, place)

そしてエラー:

TypeError: __init__() takes exactly 2 arguments (3 given)

私がやっていることは、マウスの位置をタプル (および自己引数) として渡すことです。明らかに、最初の呼び出しで機能します。これがうまくいかないアイデアはありますか?

4

1 に答える 1

2

self暗黙的に渡されるため、実際には、tower、gun (つまり、self)、および place をそれぞれ渡します。

また、明示的に 呼び出すのではなく、ここでsuper関数を使用する必要があります。tower.__init__

super を使用する例 (python 2.7):

class Animal(object):
  def __init__(self, nlegs=4):
    print 'in __init__ Animal'
    self.nlegs = nlegs

class Cat(Animal):
  def __init__(self, talk='meow'):
    print 'in __init__ Cat'
    super(Cat, self).__init__()
    self.talk = talk

tom = Cat()
print "I'm a cat with {} legs and I say '{}'".format(tom.nlegs, tom.talk)
于 2012-05-09T02:21:59.707 に答える