Такое странное поведение происходит потому, что ваш print("Middle",x,y)
не входит в определение функции, поэтому он вызывается раньше print("Out",x,y)
.
Один из возможных «правильных» способов выполнить это - определить print("Middle",x,y)
скажем в конструкторе.
x = 5
y = 3
class Exp(object):
def __init__(self, x, y):
self.x = x
self.y = y
print("In",x, y, self.x, self.y)
print("Middle",x,y)
print("Out",x,y)
Exp(1,2)
Результат, который вы получите, будет:
Out 5 3
In 1 2 1 2
Middle 1 2
Предыдущий код был эквивалентен.
x = 5
y = 3
class Exp(object):
def __init__(self, x, y):
self.x = x
self.y = y
print("In",x, y, self.x, self.y)
print("Middle",x,y)
print("Out",x,y)
Exp(1,2)
Чьим выходом будет.
Middle 5 3
Out 5 3
In 1 2 1 2