I'm trying to replicate an answer to my own accord from this answer/question here: Switch between two frames in tkinter
As you can see from the answer above, tehy instantiate multiple sub-classes of the Frame widget, and when we want to switch pages, we click a button and that class a method from our base class.
However, wouldn't creating multiple 'pages' methods under a 'Pages' class, be a lot cleaner and make sense? I'm not sure what to believe, and I would love clarification as to how I should be tackling this project, and why using classes or instanced methods would be better?
I've added my comments into the code below for lines I don't quite understand and I'm hoping I can gain some knowledge from the world of StackOverflow.
import Tkinter as tk
LARGE_FONT = ("Verdana", 12)
class Main(tk.Tk):
    def __init__(self, *args, **kwargs):
    ########### are we calling the Tk class from tkinter and passing in our 'Main' class?
        tk.Tk.__init__(self, *args, **kwargs)
    # why not self.container?
        container = tk.Frame(self)
    # again, should I be using self.page here instead?
        page = Pages(parent=container, controller=self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames = {}
        for F in ('page.page_one()', 'page.page_two()'):
        # what exactly does __name__ do? And how can I replicate this with my derived classes instanced methods?
            page_name = F#F.__name__
            frame = page#(parent=container, controller=self)
            self.frames[page_name] = frame
            frame.grid(row=0, column=0, sticky='nsew')
        self.show_frame("page.page_one()")
    def show_frame(self, page_name):
        frame = self.frames[page_name]
        frame.tkraise()
class Pages(tk.Frame):
    # i could just use *args, **kwargs here couldn't I?
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.page_one(controller)
    # here I have my instance methods inside my derived 'Pages' class
    # isn't this much cleaner, having multiple instance methods inside a class?
    # or I should be separating each page into it's own instanced class?
    def page_one(self, controller):
        label = tk.Label(self, text='show_firmware_page', font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        # how can I switch pages using the next button?
        next_btn = tk.Button(self, text='Next', command=lambda: controller.show_frame(self.page_two(controller)))
        quit_btn = tk.Button(self, text='Quit', command=lambda: controller.show_frame())
        quit_btn.pack()
        next_btn.pack()
    def page_two(self, controller):
        label = tk.Label(self, text='second_page', font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        # how can I switch pages using the next button?
        next_btn = tk.Button(self, text='Next', command=lambda: Pages.show_frame("page_one"))
        quit_btn = tk.Button(self, text='Quit', command=lambda: Pages.show_frame())
        quit_btn.pack()
        next_btn.pack()
app = Main()
app.mainloop()
Basically, my current push is to try and use methods within my class in order to define my pages and switch between them. I'm currently having some trouble, and upon taking a look at other's answers, a lot of them have the idea that each class instantiates a Frame, in which we call a method to switch between those instances.
Let me know your thoughts on this process to get me up to speed about how I should be tackling this project.
Many thanks in advance for your help - I really want to get this OOP stuff down.