Возможен ли цикл внутри класса? - PullRequest
0 голосов
/ 01 августа 2020

Я уже задавал этот вопрос, но, думаю, мне нужно уточнить, за что прошу прощения. Давайте рассмотрим самый приземленный, окончательный noob ie, в то время как l oop.

    max_count = 4
    count = 0
    while count < max_count:
        print(count)
        count += 1

Он явно печатает 0 1 2 3. Так что, я наивно полагаю, возможно, мы сделаем это в стиле OOP, как показано ниже.

    class Foo:
        def __init__(self, max_count):
            self.max_count = max_count
            self.count = 0
    
        def loop(self):
            while self.count < self.max_count:
                print(self.count)
                self.count += 1
    
    A = Foo(4).loop()

и снова он услужливо выбрасывает 0 1 2 3. Но затем я становлюсь жадным и говорю себе, что, если я не хочу печатать данные, а просто получаю их для что-то более высокое и благородное, скажем, выполнение нескольких вложенных циклов. Поэтому вместо print в методе l oop я делаю return, как показано ниже.

    class Foo:
        def __init__(self, max_count):
            self.max_count = max_count
            self.count = 0
    
        def loop(self):
            while self.count < self.max_count:
                return self.count
                self.count += 1
    
    A = Foo(4).loop()
    print(A)

И сильные мира сего награждают меня красивым плоским 0. На моем необразованном лингвах я бы сказал, что класс «душит» l oop. Пожалуйста, просветите меня: возможно ли l oop внутри класса или нет. И если да, то укажите мне правильное направление, и я займусь копанием. Кстати, я бы хотел, чтобы он был в режиме OOP, так как я действительно собираюсь управлять несколькими шаговыми двигателями одновременно. Если я попытаюсь сделать это процедурно, это вернет мои 1988 Pascal, Fortran 77 дней, и это чаша, из которой я больше не хочу пить. Заранее благодарю добрые товарищи.

1 Ответ

1 голос
/ 01 августа 2020

Причина, по которой ваш результат 0, заключается в том, что вы возвращаетесь из функции loop до увеличения значения. Я полагаю, вы намеревались распечатать значение? или, возможно, вернуть его после l oop?

Этот код:

while self.count<self.max_count:
    return self.count
    self.count+=1

Должен быть:

while self.count < self.max_count:
    self.count+=1
return self.count
...