Как мне реализовать цикл в этом скрипте?

Ну ... ответ НЕТ, если вы думаете с точки зрения того, как должен работать метод overriden в Java. Но вы не получаете никакой ошибки компилятора, если пытаетесь переопределить статический метод. Это означает, что если вы попытаетесь переопределить, Java не остановит вас; но вы, конечно, не получаете того же эффекта, что и для нестатических методов. Переопределение на Java просто означает, что конкретный метод будет вызываться в зависимости от типа времени выполнения объекта, а не от его типа времени компиляции (что имеет место при переопределении статических методов). Хорошо ... любые догадки по причине, почему они ведут себя странно? Поскольку они являются методами класса и, следовательно, доступ к ним всегда разрешается во время компиляции только с использованием информации типа времени компиляции. Доступ к ним с использованием ссылок на объекты - это дополнительная свобода, предоставляемая разработчиками Java, и мы не должны думать о том, чтобы остановить эту практику только тогда, когда они ее ограничивают: -)

Пример : давайте попробуем посмотреть, что произойдет, если мы попробуем переопределить статический метод: -

class SuperClass {
// ......
public static void staticMethod() {
    System.out.println("SuperClass: inside staticMethod");
}
// ......
}

public class SubClass extends SuperClass {
// ......
// overriding the static method
public static void staticMethod() {
    System.out.println("SubClass: inside staticMethod");
}

// ......
public static void main(String[] args) {
    // ......
    SuperClass superClassWithSuperCons = new SuperClass();
    SuperClass superClassWithSubCons = new SubClass();
    SubClass subClassWithSubCons = new SubClass();

    superClassWithSuperCons.staticMethod();
    superClassWithSubCons.staticMethod();
    subClassWithSubCons.staticMethod();
    // ...
}
}

Выход : - SuperClass: inside staticMethod SuperClass: inside staticMethod SubClass: inside staticMethod

Обратите внимание на вторую строку вывода. Если бы staticMethod был переопределен, эта строка должна была бы быть идентичной третьей строке, поскольку мы вызываем «staticMethod ()» на объект Runtime Type как «SubClass», а не как «SuperClass». Это подтверждает, что статические методы всегда разрешаются с использованием только информации типа времени компиляции.

-3
задан John 18 January 2019 в 12:59
поделиться

1 ответ

Вы можете использовать бесконечный цикл, который имеет условие разрыва. Таким образом, в конце вашего кода у вас будет что-то вроде:

while checkIfProcessRunning('discord'):
    print('Discord is running')
print('Discord is NOT running')

Это будет работать, непрерывно вызывая checkIfProcessRunning('discord'). Если он возвращает True, то он продолжает цикл и проверяет снова. Когда вы вернете False, цикл прервется.

Тем не менее, будет напечатано много Discord is running, так что вы можете захотеть использовать какой-либо метод сна в этом цикле, чтобы проверять только каждые 5 секунд или некоторое количество времени, например:

from time import sleep

while checkIfProcessRunning('discord'):
    print('Discord is running')
    sleep(5)
print('Discord is NOT running')
0
ответ дан TheStrangeQuark 18 January 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: