отдельный класс, почему включение экземпляра класса в этом конструкторе не приводит к ошибкам, связанным с действием оператора? - PullRequest
0 голосов
/ 14 июля 2020

Я создаю шахматную игру, в которой я решил реализовать два класса, класс фигуры, абстрактный класс, распространяется на различные абстрактные операции (пешка, король, ферзь, ладья, конь, слон), и каждая фигура будет размещена на месте. Класс пятна представляет собой один блок сетки 8x8 и дополнительный кусок. В моем спотовом классе я использую экземпляр класса piece в конструкторе, но получаю сообщение об ошибке «Нет ошибок эффекта оператора». Не знаю почему?

class Spot:

    def __init__(self, x, y,Piece piece):
        self.x = x
        self.y = y
        self.piece = piece

class Piece:
    killed = False
    white = False
    def __init__(self, white,killed):
        self.white = white
        self.killed = killed
    def iswhite(self):
        return self.white == True
    def iskilled(self):
        return self.killed == True

1 Ответ

1 голос
/ 14 июля 2020

В Python вам не нужно объявлять тип ваших аргументов, как в Java, C#, C ++, et c. Python динамически типизирован, поэтому интерпретатор определит, какие объекты вы передаете во время выполнения.

Измените свой код следующим образом:

class Spot:
    def __init__(self, x, y, piece):
        self.x = x
        self.y = y
        self.piece = piece

Если вы действительно хотите указать типов данных, вы можете использовать функцию Python подсказки типов следующим образом:

class Spot:
    def __init__(self, x: int, y: int, piece: Piece):
        self.x = x
        self.y = y
        self.piece = piece

Несколько других указателей:

  • Вам не нужно сравнивать логическое значение операторов, использующих x == True, вы можете просто вернуть логическую переменную x, которая будет иметь тот же эффект.
  • Вы всегда должны использовать snake_case в Python, поэтому is_white вместо iswhite.
  • Вам не нужно таким образом инициализировать переменные в классе Piece. Вы можете сделать это в методе __init__ напрямую, используя аргументы по умолчанию. Поэтому, если пользователь не предоставляет аргумент, для этого аргумента будет использоваться значение по умолчанию.
class Piece:

    def __init__(self, white=False, killed=False):
        self.white = white
        self.killed = killed

    def is_white(self):
        return self.white

    def is_killed(self):
        return self.killed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...