2016-05-03 1 views
5

Was ist der Unterschied zwischen Python-Klassenattributen und statischen Java-Attributen?Statische Attribute (Python und Java)

Zum Beispiel

in Python

class Example: 
    attribute = 3 

in Java

public class Example { 

    private static int attribute; 

} 

In Python, ein statisches Attribut kann mit einem Verweis auf eine Instanz zugegriffen werden?

+0

Python Klassenattribute können über die Klasse zugegriffen werden, sich über eine Instanz _or_. –

Antwort

4

In Python können Sie eine Klassenvariable und eine Instanzvariable mit dem gleichen Namen haben [Static class variables in Python]:

>>> class MyClass: 
...  i = 3 
... 
>>> MyClass.i 
3 

>>> m = MyClass() 
>>> m.i = 4 
>>> MyClass.i, m.i 
>>> (3, 4) 

In Java können Sie nicht ein statisches und nicht-statisches Feld mit dem gleichen Namen haben (folgendes wird nicht Kompilierung, erhalten Sie den Fehler „Duplicate Feld MyClass.i“):

public class MyClass { 
    private static int i; 
    private int i; 
} 

zusätzlich, wenn Sie versuchen, ein statisches Feld von einer Instanz zuweisen, wird es das statische Feld ändern:

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


In Java und Python Sie eine statische Variable von einer Instanz zugreifen können, aber Sie brauchen nicht zu:

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); 
    }