1. Sissejuhatus: Konstantide tähtsus Pythonis
Pythonis puuduvad C või Java keeles kasutatavad märksõnad nagu const
või final
, millega saaks konstante otse määratleda. Siiski võimaldab konstantide kasutamine parandada koodi loetavust, hooldatavust ning suurendab programmi üldist stabiilsust. Eriti kasulikud on konstandid olukordades, kus tuleb määrata väärtused, mida programmi töö käigus ei tohi muuta, näiteks füüsikalised konstandid või konfiguratsiooniväärtused.
Näiteks C keeles saab const
abil väärtuse muutmise keelata, kuid Pythonis vastavat standardset võimalust ei ole. Seetõttu peab arendaja ise selgelt näitama, millised väärtused on “konstandid”, ja rakendama meetodit, mis tagab nende püsimise muutumatuna.
2. Konstantide defineerimise põhilised meetodid Pythonis
Suurte tähtedega muutujate defineerimise tava
Kuigi Pythonis puudub ametlik viis konstantide määratlemiseks, on tavaks kasutada SUURI TÄHTI ja alakriipse konstantide tähistamiseks. Nii saavad ka teised arendajad koodi lugedes aru, et seda muutujat ei tohiks muuta. See nimetamisreegel on kirjas ka Pythoni PEP8 stiilijuhendis.
Näide:
PI = 3.14159
MAX_CONNECTIONS = 100
Sellisel viisil defineeritud konstandid püsivad kogu programmis muutumatud. Suurte tähtedega tähistamine vähendab riski, et neid kogemata ülekirjutatakse.
Kasutusnäide: Ringjoone ümbermõõdu arvutamine
radius = 5
circumference = 2 * PI * radius
print(circumference) # Väljund: 31.4159
Sellised määratlused on eriti abiks füüsikaliste konstantide ja konfiguratsiooniväärtuste puhul. See meetod on Pythoni projektides laialdaselt kasutusel ning väga levinud.

3. Konstante haldamise täiustatud tehnikad
Const-klassi loomine konstantide kaitsmiseks
Kuna Pythonis puudub range konstantide mõiste, võib juhtuda, et konstantide väärtusi muudetakse kogemata. Selle vältimiseks saab luua kohandatud klassi, mis keelab väärtuste ülekirjutamise. Sellisel juhul tekib viga, kui proovitakse konstantset väärtust uuesti määrata.
Näide: Const-klassi definitsioon
class ConstError(TypeError):
pass
class Const:
def __setattr__(self, name, value):
if name in self.__dict__:
raise ConstError(f"Can't rebind const ({name})")
self.__dict__[name] = value
const = Const()
const.PI = 3.14159
# const.PI = 3.14 # ConstError: Can't rebind const (PI)
See meetod aitab vältida kogemata toimuvat ülekirjutamist ja tagab rangema konstantide haldamise.
Enum-mooduli kasutamine
Alates Python 3.4 versioonist saab kasutada enum
moodulit, et grupeerida mitu konstanti kokku. Enum
toimib sarnaselt konstantidele ning aitab vältida kogemata väärtuste muutmist.
Näide: Enumiga konstantide defineerimine
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED) # Väljund: Color.RED
Enum muudab mitme konstanti turvalise haldamise lihtsamaks ja on kasulik, kui töötada kindlasse gruppi kuuluvate väärtustega.
4. Täiustatud konstantide haldamine moodulite ja metaklassidega
Konstantide haldamine mooduli tasandil
Suurtes projektides on oluline konstandid tsentraalselt hallata. See muudab nende muutmise ja lisamise lihtsamaks ning parandab kogu projekti hooldatavust. Pythonis on soovitatav konstandid koondada eraldi faili ja importida neid mujalt.
Näide: settings.py
fail konstantsuste haldamiseks
# settings.py
PI = 3.14159
EULER = 2.71828
# main.py
import settings
print(settings.PI) # Väljund: 3.14159
Selline lähenemine tagab, et konstandid on hallatud ühest kohast ja neid kasutatakse ühtselt kogu programmis.
Metaklasside kasutamine
Veelgi rangema kaitse saavutamiseks saab kasutada metaklasse, et keelata klassitasemel konstantide muutmine. Metaklasside abil saab vältida kogemata ülekirjutamist ja suurendada programmi stabiilsust.
Näide: Konstandid metaklassiga
class ConstantMeta(type):
def __setattr__(cls, key, value):
if key in cls.__dict__:
raise AttributeError("Cannot reassign constant")
super().__setattr__(key, value)
class Constants(metaclass=ConstantMeta):
PI = 3.14159
# Constants.PI = 3.14 # AttributeError: Cannot reassign constant
Nii defineeritud konstandid on rangelt kaitstud ning neid ei saa uuesti määrata.
