2016-05-03 3 views
5

В чем разница между атрибутами класса Python и статическими атрибутами Java?Статические атрибуты (Python vs Java)

Например,

в Python

class Example: 
    attribute = 3 

в Java

public class Example { 

    private static int attribute; 

} 

В Python статический атрибут можно получить с помощью ссылки на экземпляр?

+0

атрибуты класса Python могут быть доступны через класс сам _or_ через экземпляр. –

ответ

4

В 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); 
    } 
Смежные вопросы