TypeError: main() missing 1 required positional argument: 'op' code example

Example 1: python missing 1 required positional argument:

def your_method(self, arg1, arg2): # you must add the "self" argument in 1st position

# This kind of error happens when working with classes
# When you create methods for a class, you must always pass self as the first argument
# self designates the object in which it is called
# for instance : 
class Dog: # let create a class Dog
  def __init__(self, color, age): # when you create a new Dog object, two parameters are required
    self.color = color # here, whe use self to attach the attribute to this Dog object
    self.age = age
    self.bark("Woof")
  def bark(self, message): # your error might come from the fact you forgot to add the self element as the first argument in, at least, one method
    print(message)
# This is a very simple example but it stays true for every class
# You have to pass self as the first argument for each method

Example 2: python missing 1 required positional argument:

"""
This might pop up if you're trying to use a class directly, 
rather than instantiating it
"""

class MyClass:
    def __init__(self, attr) -> None:
        self.attr = attr

    def get_attr (self):
        self.attr

# CORRECT
myclass = MyClass(1)
print (type(myclass))       # <class '__main__.MyClass'>
print (myclass.get_attr())  # 1

# INCORRECT
myclass = MyClass
print (type(myclass))       # <class 'type'>
print (myclass.get_attr())  
# TypeError: get_attr() missing 1 required positional argument: 'self'

# INCORRECT (effectively the same as above)
print (type(MyClass))       # <class 'type'>
print (MyClass.get_attr())  
# TypeError: get_attr() missing 1 required positional argument: 'self'