麻烦实例化Python类

时间:2014-12-31 13:30:07

标签: python

我很遗憾地问这个问题,因为关于这个问题已经写了很多,但我在将其用于特定项目时遇到了很多困难。

目标是创建一个MarblesBoard类,它将一组数字作为输入,然后播放游戏以按顺序排列数字。

这是我的代码:

class MarblesBoard:

    def _init_(self, numbers):
        self.board = []
        for i in numbers:
            board[i] = numbers[i]

    def switch():
        temp = board[0]
        board[0] = board[1]
        board[1] = temp


def main():
    board = MarblesBoard((3,4,5))
    print("I'm here")

因此输入数字(作为元组),将它们放入数组中,然后像切换方法一样操作它们。

但是当我接触到我的主要方法时,我无法打印任何内容。

2 个答案:

答案 0 :(得分:1)

1)第一个修复是_init_函数,它具有双前导和尾随下划线

def __init__(self, numbers):

2)您正在尝试使用元组作为索引位置raise index error将插入数字(元组)放入空列表中。

例如: -

>>> board = []
>>> numbers = (3,4,5)
>>> for i in numbers:
...     board[i] = numbers[i]
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: tuple index out of range

所以你必须将你的数字参数分配给self.board。

self.board = numbers

3)如果switch是你的实例方法,你必须将self作为第一个参数传递。

def switch(self):
    temp = self.board[0]
    #Your logic

所以在解决之后,这就是它看起来的样子。

class MarblesBoard:

    def __init__(self, numbers):
        self.board = numbers

    def switch(self):
        temp = self.board[0]
        # your logic

def main():
    board_obj = MarblesBoard((3,4,5))
    print("I'm here")
    print board_obj.board

main()

使用__name__ == '__main__'代替main函数。

if __name__ == '__main__':
    board_obj = MarblesBoard((3,4,5))
    print("I'm here")
    print board_obj.board  

答案 1 :(得分:-1)

您的代码存在很多问题。我猜这是你的第一个python类。

首先,主要应该在课外。 init有两个_。当您引用成员变量时,您必须始终使用self。 “对于我的数字”循环数字本身,而不是他们的指数。当foo是一个空数组时,你不能只在python中指定foo [i] = bar(我想你可以用其他语言)。在类上创建成员方法时,它们必须始终将self作为其第一个参数。

class MarblesBoard:

    def __init__(self, numbers):
        self.board = []
        for i in numbers:
            self.board.append(i)


    def switch(self):
        # Fixing this left as an exercise for the OP


if __name__=="__main__":
        board = MarblesBoard((3,4,5))
        print("I'm here")