Sp00kyRe4l1ty
Sp00kyRe4l1ty

Reputation: 13

Python Object Oriented

I was kinda playing around with Object Oriented Programming in python and ran into an error i havent encountered before..:

class Main:
    def __init__(self, a , b):
        self.a = a
        self.b = b

    def even(self):
        start = self.a
        slut = self.b
        while start <= slut:
            if start % 2 == 0:
                yield start
            start += 1

    def odd(self):
        start = self.a
        slut = self.b
        while start <= slut:
            if start % 2 != 0:
                yield start
            start += 1

    def display():
        evens = list(num.even())
        odds = list(num.odd())
        print(f"{evens}'\n'{odds}")

num = Main(20, 50)

Main.display()

Take a look at the last class method, where there shouldent be a 'self' as a parameter for the program to Work..Why is that? I thought every class method should include a 'self' as a parameter? The program wont work with it

Upvotes: 1

Views: 162

Answers (1)

chepner
chepner

Reputation: 531693

There should be a self parameter, if it's intended to be an instance method, and you would get an error if you tried to use it as so, i.e., num.display().

However, you are calling it via the class, and Main.display simply returns the function itself, not an instance of method, so it works as-is.

Given that you use a specific instance of Main (namely, num) in the body, you should replace that with self:

def display(self):
    evens = list(self.even())
    odds = list(self.odd())
    print(f"{evens}'\n'{odds}")

and invoke it with

num.display()

Upvotes: 1

Related Questions