Python объектно-ориентированный - PullRequest
0 голосов
/ 03 ноября 2019

это мой первый пост! Поэтому я прошу прощения впереди .. извините за плохой плохой вопрос (возможно) и код! Я не знаю, как сформулировать вопрос, поэтому я отправляю этот вопрос ... Я как бы поигрался с объектно-ориентированным программированием на python и столкнулся с ошибкой, с которой я раньше не сталкивался ... Вот мой глупый код:

"""
Good times while drunk
Sorry for bad code
slut == finish (Danish)
"""
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()

Взгляните на последний метод класса, где в качестве параметра для программы для работы должен присутствовать «я». Почему? Я думал, что каждый метод класса должен включать «я» в качестве параметра? Программа не будет работать с ним

1 Ответ

1 голос
/ 03 ноября 2019

Должен быть параметр self, если он предназначен для использования в качестве метода экземпляра, и вы получите сообщение об ошибке, если попытаетесь использовать его таким образом, т. Е. num.display().

Однаковы вызываете его через класс , а Main.display просто возвращает саму функцию, а не экземпляр method, поэтому она работает как есть.

Учитывая, что вы используете определенный экземпляр Main (а именно, num) в теле, вы должны заменить его на self:

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

и вызвать его на

num.display()
...