Можно ли визуализировать статический метод Java как функцию в python + метод экземпляра с тем же именем (как у функции)? - PullRequest
3 голосов
/ 25 марта 2019

Я пытаюсь понять статические методы в Java. Я уже делал базовый Python, поэтому я пытаюсь визуализировать статический метод Java в Python.

Является ли статический метод в коде ниже

class test{
    public static void main(String[] args) {
        printHello();
    }

    public static void printHello(){
        System.out.println("This is a Java's static method");
    } 
}

эквивалентно этому?

def printhello():
    print("It is a printhello function")

class hello():
    def printhello(self):
        print("It is a printhello method of a instance")

Поскольку статические методы могут быть доступны без создания объектов, def printhello будет работать следующим образом.

И когда объект обращается к статическому методу в Java, instance method, предоставляемый в классе python, будет работать так.

Если нет, то каково было бы правильное отображение статического метода Java в Python.

Спасибо.

1 Ответ

4 голосов
/ 25 марта 2019

Здесь

class Hello:
    def printhello(self):
        ...

вы передаете self ссылку на метод.Это означает, что это метод instance .
A static метод по умолчанию никогда не владеет ссылкой на экземпляр его содержащего класса.

Класс Python static методы определяются, как правило, с использованием аннотации @staticmethod, и они не принимают self

class Hello:
    @staticmethod
    def printhello():
        ...

Таким образом, в Java

class Hello {
    public static void printhello() {
        ...
    } 
}
все вышеперечисленное станет

В Java нет концепции функций первого уровня, поэтому этот

def printhello():
    print("It is a printhello function")

на самом деле не переводим, но обычно это более идиоматический способ определения свободных / статических функций вPython.


Как вы, наверное, поняли, отвечая на ваш вопрос

Является ли статический метод в коде ниже
...
эквивалентным этому?

Нет, это совсем не эквивалентно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...