如何从外部类调用属性?

2024-03-29 10:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

更新2.0

现在更新了它,所以每个旧的“函数”都被移到了我的类下面。现在看来我唯一的问题之一就是弄清楚所有这些drawBoard() takes 1 positional argument but 2 were given

这只是我当前课程的开始,只是为了向你展示我目前正在处理的问题


Tags: 函数argumentgiven课程buttakespositionalwere
2条回答

正如我在评论中所说,我认为您应该在类BoardHandler方法中生成这两个函数。这将为您提供更好的encapsulation并且非常容易实现,以下是方法:

class BoardHandler:
    def __init__ (self, size, board):
        self.size = size
        self.board = board

    def ask_size(self):
        try:
            self.size = int(input("Which size would you want?"))
        except ValueError:
            print("Wrong! try again")
            ask_size()

    def getNewBoard(self):
        board=[]
        for i in range(self.size):
            board.append([' ']* self.size)
        self.board = board

    def resetBoard(self):
        for x in range(self.size):
            for y in range(self.size):
                self.board[x][y] = ' '

        n=int(size/2-1)
        self.board[n][n] = 'B'
        self.board[n+1][n] = 'W'
        self.board[n][n+1] = 'W'
        self.board[n+1][n+1] = 'B'

    def drawBoard(self):
        HLINE = '                      '

        for y in range(self.size):
            print(y+1, end=' ')
            for x in range(Q):
                print('| %s' % (self.board[x][y]), end=' ')
            print('|')
            print(HLINE)

如果出于某种原因想将它们保留在类之外,则需要修改它们,以接受BoardHandler类实例作为参数:

^{pr2}$

这假设您的程序创建一个BoardHandler类实例,并对该对象执行所有操作。在

更新依据:

Every run of the program will give the option which size the board should be ... every board in the code shall be the same size

我们将size作为一个类变量,并且只有在尚未设置大小时才提示输入大小。所有后续的电路板创建将使用与第一块板相同的尺寸:

class BoardHandler:
    size = None

    def __init__(self):
        self.board = None

        if BoardHandler.size is None:
            self.ask_size()

        self.getNewBoard()

    def ask_size(self):  # no self use, method could be a function
        while True:
            try:
                BoardHandler.size = int(input("Which size would you want? "))
                break
            except ValueError:
                print("Wrong! try again")

    def getNewBoard(self):
        self.board = []

        for _ in range(BoardHandler.size):
            self.board.append([' '] * BoardHandler.size)

    def resetBoard(self):
        for x in range(BoardHandler.size):
            for y in range(BoardHandler.size):
                self.board[x][y] = ' '

        n = int(BoardHandler.size / 2 - 1)
        self.board[n][n] = 'B'
        self.board[n + 1][n] = 'W'
        self.board[n][n + 1] = 'W'
        self.board[n + 1][n + 1] = 'B'

    def drawBoard(self):
        HLINE = '   ' + '-' * (4 * BoardHandler.size) + '-'

        print(HLINE)

        for y in range(BoardHandler.size):
            print("{:2d}".format(y + 1), end=' ')
            for x in range(BoardHandler.size):
                print('| {}'.format(self.board[x][y]), end=' ')
            print('|')
            print(HLINE)

handler = BoardHandler()
handler.resetBoard()

handler.board[0][0] = 'W'

handler.drawBoard()

print(BoardHandler.size)

handler2 = BoardHandler()
handler2.drawBoard()  # empty board but same size as first

相关问题 更多 >