class variable в Python

Contents
Введение
Простейший пример
Пример с __init__()
Объекты
Похожие статьи

Введение

В объектно-ориентированном программировании с классами переменная класса - это любая переменная, объявленная со статическим модификатором, для которой существует единственная копия, независимо от того, сколько экземпляров класса существует.

Переменная класса не является переменной экземпляра. Это особый тип атрибута класса (или свойства класса, поля или элемента данных).

Та же дихотомия между экземпляром и членами класса применима и к методам ("функциям-членам"); класс может иметь как методы экземпляра, так и методы класса.

Пример

class Site(): protocol = "https" pass hh = Site() hh.domain = "www.heihei.ru" hh.name = "HeiHei.ru" tb = Site() tb.domain = "www.heihei.ru" tb.name = "TopBicycle.ur" print(hh.protocol, hh.domain, tb.protocol, tb.domain)

python class_variable.py

https www.heihei.ru https www.heihei.ru

Пример с __init__()

Перед изучением следующего примера рекомендую ознакомится со статьями про __init__() и self

class Cosmo: cosmo_count = 0 raise_amount = 1.04 def __init__(self, first, last, pay): self.first = first self.last = last self.pay = pay self.fullname = first + " " + last self.email = first + '.' + last + '@vostok.su' Cosmo.cosmo_count += 1 def apply_raise(self): self.pay = int(self.pay * self.raise_amount) # also possible # self.pay = int(self.pay * Cosmo.raise_amount) # but not # self.pay = int(self.pay * raise_amount) // NameError: name 'raise_amount' is not defined # Class print(Cosmo.__dict__) # Create two instances cosm_2 = Cosmo('German', 'Titov', 2000) cosm_3 = Cosmo('Andriyan', 'Nikolaev', 3000) # Check cosm_2 instance print(cosm_2.__dict__) # Check how raise() works print(f"Initial {cosm_2.last} pay: {cosm_2.pay}") cosm_2.apply_raise() print(f"New {cosm_2.last} pay: {cosm_2.pay}") print(cosm_2.__dict__) # Check that raise amount changed for one instance # does not affect other instances print(f"Initial {cosm_2.last} raise_amount: {cosm_2.raise_amount}") cosm_2.raise_amount = 1.1 print(cosm_2.__dict__) print(f"New {cosm_2.last} raise_amount: {cosm_2.raise_amount}") print(f"{cosm_3.last} raise_amount remains: {cosm_3.raise_amount}") # Check that instance count works print(f"Created {Cosmo.cosmo_count} cosmonaut profiles")

python class_variable.py

{'__module__': '__main__', 'cosmo_count': 2, 'raise_amount': 1.04, '__init__': <function Cosmo.__init__ at 0x7fa3f5e5ea60>, 'apply_raise': <function Cosmo.apply_raise at 0x7fa3f5e5eaf0>, '__dict__': <attribute '__dict__' of 'Cosmo' objects>, '__weakref__': <attribute '__weakref__' of 'Cosmo' objects>, '__doc__': None} {'first': 'German', 'last': 'Titov', 'pay': 2000, 'fullname': 'German Titov', 'email': 'German.Titov@vostok.su'} Initial Titov pay: 2000 New Titov pay: 2080 {'first': 'German', 'last': 'Titov', 'pay': 2080, 'fullname': 'German Titov', 'email': 'German.Titov@vostok.su'} Initial Titov raise_amount: 1.04 {'first': 'German', 'last': 'Titov', 'pay': 2080, 'fullname': 'German Titov', 'email': 'German.Titov@vostok.su', 'raise_amount': 1.1} New Titov raise_amount: 1.1 Nikolaev raise_amount remains: 1.04 Created 2 cosmonaut profiles

Related Articles
OOP in Python
Classes
Methods
class variables
class methods
Static Methods
Inheritance
Special Methods
property decorator
Python
Functions
super()

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedbak and Questions in Telegram

@aofeedchat