В Python, вы можете иметь переменную класса и переменную экземпляра с тем же именем [Static class variables in Python]:
>>> class MyClass:
... i = 3
...
>>> MyClass.i
3
>>> m = MyClass()
>>> m.i = 4
>>> MyClass.i, m.i
>>> (3, 4)
В Java, вы не можете иметь статический и не статическое поле с тем же именем (следующий будет не компиляции, вы получите сообщение об ошибке «Дублировать поле MyClass.i»):
public class MyClass {
private static int i;
private int i;
}
дополнительно, если вы попытаетесь присвоить статическое поле из экземпляра, он изменит статическое поле:
public class MyClass {
private static int i = 3;
public static void main(String[] args) {
MyClass m = new MyClass();
m.i = 4;
System.out.println(MyClass.i + ", " + m.i);
}
}
4, 4
В обоих Java и Python вы можете получить доступ к статической переменной из экземпляра, но вам не нужно:
Python:
>>> m = MyClass()
>>> m.i
3
>>> MyClass.i
3
Java:
public static void main(String[] args) {
System.out.println(new MyClass().i);
System.out.println(MyClass.i);
}
атрибуты класса Python могут быть доступны через класс сам _or_ через экземпляр. –