class Menu(object):
	def __init__ (self,x,y):
		self.x = x
		self.y = y
		
		self.button_height = 20
		self.b1 = Button(x = ..., y = ...) # у класса "Button" есть параметры x и y
		self.b2 = Button(x = ..., y = ...)
		...
		self.buttons = [self.b1, self.b2, ...]
		
		self.place_buttons()
		
	def place_buttons(self):
		for i in range(0, len(self.buttons)):
			self.buttons[i].x = self.x
			self.buttons[i].y = self.y + i*self.button_height
	
class Window(gui_window):
	def __init__(self, args):
		...
		self.width = 479
		self.height = 1723
		...
		# передаваемые изначально координаты примерно так выглядят
		self.menu = Menu(x = self.width + self.elem2.size / (2 * 
						(1 + self.elem1.length * self.elem1.base_size)), y = 5 )
		
		self.go_fullscreen() 	# разумеется, это не в ините стоит, а по
								# выбору в настройках делается.

	def go_fullscreen(self):
		self.set_fullscreen(True)
		# размеры "окна" изменились, перемещаем кнопочки
		self.menu.place_buttons()
		# вот только menu.x как имело присвоенное в __init__ значение, 
		# так и имеет, так что повторный вызов этой функции (первый раз 
		# из самого menu была вызвана) не изменит ничего.
	
	# А вот если делать self.menu = Menu(x = lambda: self.width +...),
	# то всё работает как мне хочется.
	
	# передавать каждый раз в self.menu.place_buttons(длинный_аргумент_координаты)
	# довольно неразумно, если можно просто записать выражение в один из
	# параметров самого класса Menu.