Почему я получаю SyntaxError при создании экземпляра __repr__method - PullRequest
0 голосов
/ 17 июня 2020

Я получаю следующую ошибку, когда создаю экземпляр класса с помощью имеющегося у меня метода repr .

Когда я удаляю repr, он работает нормально:

repr удалено

class Wide():
    def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
        self.XfromLeftEdge =XfromLeftEdge
        self.YfromTopEdge =YfromTopEdge
        self.Width = Width
        self.Height = Height

    def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
        return XfromLeftEdge, YfromTopEdge, Width, Height

a = Wide()
print(a)

return:

<__main__.Wide object at 0x7faec1ed48b0>
(base) user SDNrig 6 % 

с repr

class Wide():
    def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
        self.XfromLeftEdge =XfromLeftEdge
        self.YfromTopEdge =YfromTopEdge
        self.Width = Width
        self.Height = Height

    def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
        return XfromLeftEdge, YfromTopEdge, Width, Height

    def __repr__(self):
        return '{}, {}, {}, {}'.format(self.XfromLeftEdge = XfromLeftEdge, self.YfromTopEdge = YfromTopEdge, self.Width = Width, self.Height = Height)

    def __str__(self):
        return 'instance object of wide ROI object, XfromLeftEdge:{}, YfromTopEdge: {}, Width: {}, Height: {}'.format(
            self.XfromLeftEdge = XfromLeftEdge,
            self.YfromTopEdge = YfromTopEdge,
            self.Width = Width,
            self.Height = Height)
 
a = Wide()
print(a)

return

(base) user SDNrig 6 % /usr/local/bin/python3 "/Users/.../Desktop/SDNrig 6/play_f.py"
  File "/Users/.../Desktop/SDNrig 6/play_f.py", line 15
    return '{}, {}, {}, {}'.format(self.XfromLeftEdge = XfromLeftEdge, self.YfromTopEdge = YfromTopEdge, self.Width = Width, self.Height = Height)
                                   ^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

Желаемый результат

Я бы хотел, чтобы print (a) дал параметры и их значения.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вам не нужно присвоение в строке формата. Используйте это:

class Wide():
def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
    self.XfromLeftEdge =XfromLeftEdge
    self.YfromTopEdge =YfromTopEdge
    self.Width = Width
    self.Height = Height

def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
    return XfromLeftEdge, YfromTopEdge, Width, Height

def __repr__(self):
    return f"Wide({self.XfromLeftEdge}, {self.YfromTopEdge}, {self.Width}, {self.Height})"

def __str__(self):
    return f'instance object of wide ROI object, XfromLeftEdge:{self.XfromLeftEdge}, YfromTopEdge: {self.YfromTopEdge}, Width: {self.Width}, Height: {Self.Height}'

Это также будет использовать синтаксис f-строки для большей читаемости

0 голосов
/ 17 июня 2020

Этот код устранит вашу ошибку

class Wide():
    def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
        self.XfromLeftEdge =XfromLeftEdge
        self.YfromTopEdge =YfromTopEdge
        self.Width = Width
        self.Height = Height

    def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
        return XfromLeftEdge, YfromTopEdge, Width, Height

    def __repr__(self):
        return '{}, {}, {}, {}'.format(self.XfromLeftEdg, self.YfromTopEdge, self.Width, self.Height)

    def __str__(self):
        return 'instance object of wide ROI object, XfromLeftEdge:{}, YfromTopEdge: {}, Width: {}, Height: {}'.format(
            self.XfromLeftEdge,
            self.YfromTopEdge,
            self.Width,
            self.Height)

a = Wide()
print(a)

Или

class Wide():
    def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
        self.XfromLeftEdge =XfromLeftEdge
        self.YfromTopEdge =YfromTopEdge
        self.Width = Width
        self.Height = Height

    def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
        return XfromLeftEdge, YfromTopEdge, Width, Height

    def __repr__(self):
        return '{XfromLeftEdg}, {YfromTopEdge}, {Width}, {Height}'.format(XfromLeftEdg = self.XfromLeftEdg, YfromTopEdge =self.YfromTopEdge, Width = self.Width, Height =self.Height)

    def __str__(self):
        return 'instance object of wide ROI object, XfromLeftEdge:{XfromLeftEdge}, YfromTopEdge: {YfromTopEdge}, Width: {Width}, Height: {Height}'.format(
            XfromLeftEdge = self.XfromLeftEdge,
            YfromTopEdge = self.YfromTopEdge,
            Width = self.Width,
            Height = self.Height)

a = Wide()
print(a)

Проблема заключалась в том, что в строке методов repr и str есть {} без ключа и внутри метода форматирования есть пара ключ-значение.
И направление ключа и значения поменялось местами.

...