logo

Zmienne klasowe lub statyczne w Pythonie

Wszystkie obiekty mają wspólną klasę lub zmienne statyczne. Instancja lub zmienne niestatyczne są różne dla różnych obiektów (każdy obiekt ma kopię). Załóżmy na przykład, że student informatyki będzie reprezentowany przez klasę CSSudent . Klasa może posiadać zmienną statyczną, której wartość wynosi cse dla wszystkich obiektów. Klasa może również mieć niestatyczne elementy członkowskie, takie jak nazwa I rolka .

W C++ i Javie możemy używać statycznych słów kluczowych, aby uczynić zmienną zmienną klasową. Zmienne, które nie mają poprzedzającego słowa kluczowego static, są zmiennymi instancji. Zobacz to dla przykładu Java i this dla przykładu C++.



Wyjaśnienie:

W Pythonie zmienna statyczna to zmienna współdzielona przez wszystkie instancje klasy, a nie unikalna dla każdej instancji. Czasami nazywa się ją również zmienną klasową, ponieważ należy do samej klasy, a nie do jakiejś konkretnej instancji klasy.

Zmienne statyczne są zdefiniowane wewnątrz definicji klasy, ale poza definicjami metod. Zwykle są inicjowane wartością, podobnie jak zmienna instancji, ale można uzyskać do nich dostęp i je modyfikować poprzez samą klasę, a nie przez instancję.

Cechy zmiennych statycznych

  • Zmienne statyczne przydzielają pamięć jednorazowo, gdy obiekt dla klasy jest tworzony po raz pierwszy.
  • Zmienne statyczne są tworzone poza metodami, ale wewnątrz klasy
  • Dostęp do zmiennych statycznych można uzyskać poprzez klasę, ale nie bezpośrednio poprzez instancję.
  • Zachowanie zmiennych statycznych nie zmienia się dla każdego obiektu.

Podejście do Pythona jest proste; nie wymaga statycznego słowa kluczowego.



Notatka: Wszystkie zmienne, którym przypisano wartość w the deklaracje klasy są zmiennymi klasowymi. I zmienne To którym przypisane są wartości wewnątrz metod, są zmiennymi instancji.

łączenie się z bazą danych w Javie

Przykład:

Pyton






# Python program to show that the variables with a value> # assigned in class declaration, are class variables> # Class for Computer Science Student> class> CSStudent:> >stream>=> 'cse'> # Class Variable> >def> __init__(>self>,name,roll):> >self>.name>=> name># Instance Variable> >self>.roll>=> roll># Instance Variable> # Objects of CSStudent class> a>=> CSStudent(>'Geek'>,>1>)> b>=> CSStudent(>'Nerd'>,>2>)> print>(a.stream)># prints 'cse'> print>(b.stream)># prints 'cse'> print>(a.name)># prints 'Geek'> print>(b.name)># prints 'Nerd'> print>(a.roll)># prints '1'> print>(b.roll)># prints '2'> # Class variables can be accessed using class> # name also> print>(CSStudent.stream)># prints 'cse'> # Now if we change the stream for just a it won't be changed for b> a.stream>=> 'ece'> print>(a.stream)># prints 'ece'> print>(b.stream)># prints 'cse'> # To change the stream for all instances of the class we can change it> # directly from the class> CSStudent.stream>=> 'mech'> print>(a.stream)># prints 'ece'> print>(b.stream)># prints 'mech'>

>

>

Wyjście

cse cse Geek Nerd 1 2 cse ece cse ece mech>

Wyjście:

cse cse Geek Nerd 1 2 cse ece cse ece mech>

Przykład:

Pyton




class> MyClass:> >static_var>=> 0> >def> __init__(>self>):> >MyClass.static_var>+>=> 1> >self>.instance_var>=> MyClass.static_var> obj1>=> MyClass()> print>(obj1.instance_var)># Output: 1> obj2>=> MyClass()> print>(obj2.instance_var)># Output: 2> print>(MyClass.static_var)># Output: 2>

>

>

Wyjście

1 2 2>

Wyjaśnienie:

w tym przykładzie definiujemy klasę MyClass, która ma zmienną statyczną static_var zainicjowaną na 0. Definiujemy również zmienną instancji instancji_var, która jest unikalna dla każdej instancji klasy.

Tworząc instancję klasy (obj1) zwiększamy wartość zmiennej statycznej o 1 i przypisujemy ją do zmiennej instancji. Kiedy tworzymy kolejną instancję klasy (obj2), ponownie zwiększamy zmienną statyczną i przypisujemy nową wartość do zmiennej instancji dla tej instancji.

Na koniec wypisujemy wartość zmiennej statycznej, używając samej klasy, a nie instancji klasy. Jak widać, wartość zmiennej statycznej jest współdzielona pomiędzy wszystkimi instancjami klasy i jest zwiększana za każdym razem, gdy tworzona jest nowa instancja.

Zmienne statyczne mogą być przydatne do utrzymywania stanu we wszystkich instancjach klasy lub do udostępniania danych pomiędzy wszystkimi instancjami klasy. Ważne jest jednak, aby używać ich ostrożnie i zadbać o to, aby ich wartości były zsynchronizowane ze stanem programu, zwłaszcza w środowisku wielowątkowym.

Zalety:

    Wydajność pamięci: ponieważ zmienne statyczne są współdzielone pomiędzy wszystkimi instancjami klasy, mogą oszczędzać pamięć, unikając konieczności tworzenia wielu kopii tych samych danych. Stan współdzielony: Zmienne statyczne mogą zapewnić sposób na utrzymanie stanu współdzielonego we wszystkich instancjach klasy, umożliwiając wszystkim instancjom dostęp do tych samych danych i modyfikowanie ich. Łatwy dostęp: Dostęp do zmiennych statycznych można uzyskać za pomocą samej nazwy klasy, bez konieczności posiadania instancji klasy. Może to sprawić, że dostęp do danych przechowywanych w zmiennej statycznej i modyfikowanie ich będzie wygodniejszy. Inicjalizacja: Zmienne statyczne można inicjować podczas definiowania klasy, dzięki czemu można łatwo upewnić się, że zmienna ma prawidłową wartość początkową. Czytelność: Zmienne statyczne mogą poprawić czytelność kodu, ponieważ wyraźnie wskazują, że dane przechowywane w zmiennej są współdzielone pomiędzy wszystkimi instancjami klasy.

Niedogodności:

    Sztywność: zmienne statyczne mogą być nieelastyczne, ponieważ ich wartości są wspólne dla wszystkich instancji klasy, co utrudnia posiadanie różnych wartości dla różnych instancji. Ukryte zależności: Zmienne statyczne mogą tworzyć ukryte zależności pomiędzy różnymi częściami kodu, co utrudnia zrozumienie i modyfikację kodu. Bezpieczeństwo wątków: zmienne statyczne mogą być problematyczne w środowisku wielowątkowym, ponieważ mogą powodować warunki wyścigowe i problemy z synchronizacją, jeśli nie są odpowiednio zsynchronizowane. Zanieczyszczenie przestrzeni nazw: zmienne statyczne mogą dodawać do przestrzeni nazw klasy, potencjalnie powodując konflikty nazw i utrudniając utrzymanie kodu. Testowanie: Zmienne statyczne mogą utrudniać pisanie skutecznych testów jednostkowych, ponieważ stan zmiennej statycznej może wpływać na zachowanie klasy i jej metod.

Ogólnie rzecz biorąc, zmienne statyczne mogą być użytecznym narzędziem w programowaniu w Pythonie, ale należy ich używać ostrożnie i zwracać uwagę na potencjalne wady, takie jak brak elastyczności, ukryte zależności i obawy dotyczące bezpieczeństwa wątków.