Ahmad Qassym Ответов: 1

Как я могу позволить ему дать мне правильный вывод несмотря на изменение порядка параметров в строке 12


  1  class cl:
  2      def __init__(self,x,y):
  3          self.x = x
  4          self.y = y
  5      def multiply(self,n):
  6          self.x = self.x * n
  7          self.y = self.y * n
  8  
  9  class Cam(cl):
 10      def __init__(self,g,x,y):
 11          self.g = g
 12          super().__init__(x,y)
 13  
 14  
 15  if __name__ == "__main__":

выход:
m.x is : 2 ## m.y is : 3
    m = Cam(1,2,3)
    print('m.x is :',m.x,'##','m.y is :' ,m.y)


Что я уже пробовал:

Я пытаюсь позволить моему коду напечататься:
m.x is : 2 ## m.y is : 3

он делает это правильно, но я заметил, что когда я обмениваюсь x и y в строке 12, он дает мне выход:
m.x is : 3 ## m.y is : 2

даже если они остаются в строке 10 в порядке g,x,y.

Знаете ли вы, почему и какой механизм стоит за этим (или что происходит за кулисами?)

1 Ответов

Рейтинг:
9

Richard MacCutchan

Конечно, это так, поскольку вы передаете параметры по позиции, а не по имени. Таким образом, если вы измените порядок в строке 12, то они будут отменены, когда они будут получены конструктором c1.
Если вы хотите, чтобы значения назывались по имени, то ваш код должен быть:

class cl:
    def __init__(self,x=0,y=0):
        self.x = x
        self.y = y
    def multiply(self,n):
        self.x = self.x * n
        self.y = self.y * n

class Cam(cl):
    def __init__(self,g,x=0,y=0):
        self.g = g
        super().__init__(x=x, y=y) # the order for x and y can be changed


Ahmad Qassym

спасибо мистер Макатчан