1

我正在学习 Python,我对从一个类到另一个类的调用语法感到困惑。我做了很多搜索,但无法回答任何工作。我总是得到如下变化:

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

非常感谢帮助

import random
class Position(object):
    '''
    Initializes a position
    '''
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def getX(self):
        return self.x

    def getY(self):
        return self.y

class RectangularRoom(object):
    '''
    Limits for valid positions
    '''
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def getRandomPosition(self):
        '''
        Return a random position
        inside the limits
        '''        
        rX = random.randrange(0, self.width)
        rY = random.randrange(0, self.height)

        pos = Position(self, rX, rY)
        # how do I instantiate Position with rX, rY?

room = RectangularRoom()
room.getRandomPosition()
4

2 回答 2

1

您不需要传递self- 那是新创建的实例,由 Python 自动提供。

pos = Position(rX, rY)

请注意,此处的错误发生在此行上,但是:

room = RectangularRoom()

这条线上的问题是你没有给予widthheight

于 2013-04-06T17:32:32.057 回答
0

也许这些前面问题的答案可以帮助你理解为什么 python 决定在方法上添加显式的特殊第一个参数:

错误消息可能有点神秘,但是一旦您看到它一两次,您就知道要检查什么:

  1. 您是否忘记在方法上定义 self/cls 第一个参数?
  2. 您是否传递了所有必需的方法参数?(第一个不算)

那些期望/给定的数字有很大帮助。

于 2013-04-06T19:05:02.303 回答