Python පrogrammers අතර ඉතා සරල පෙනෙන කේතයක් මත අමුතු ප්රශ්නයක් උත්පාදනය වුණා. 20 දෙනෙකුට එය දී, ක්රියාත්මක කිරීමේ පෙර ප්රතිඵලය ලියන්න කියා බලලා, 18 දෙනා වැරදි පිළිතුරක් ලබාදී.
කේතයෙහි Config නමින් ක්ලාස් එකක් ඇත. එහි settings = {} යන ලයින් එකක් ක්ලාස් මට්ටමේ variable එකක් ලෙස දියත් කරයි. පසුපස add method එකක් තියෙන්නේ, ඒකෙන් self.settings[key] = value ලෙස dict එකට අගයක් එක් කරනවා.
එකක් පසු, c1 = Config() සහ c2 = Config() ලෙස දෙකම වස්තු (instance) දෙකක් නිර්මාණය කරලා, c1.add("theme", "dark") සහ c2.add("language", "Python") කියලා දෙකෙන්ම විවිධ key/value එකතු කරනවා. ඉතින් බොහෝ දෙනා c1.settings එක {'theme': 'dark'} වගේ, c2.settings එක {'language': 'Python'} වගේ වෙන වෙනම පෙන්වයි කියලා හිතුවා.
ඇත්තටම, දෙකම {'theme': 'dark', 'language': 'Python'} ලෙස එකම dict එකේ අන්තර්ගතය පෙන්වනවා. ඒක සිදු වීමේ හේතුව, settings ක්ලාස් variable එකක් වීම නිසා, c1 සහ c2 එකම memory location එකේ dict එක බෙදා ගන්නා බැවින්, එකක් මත කරන වෙනස්කම තවත් එකටත් බලපානවා.
ශ්රී ලංකාවට ඇති වැදගත්කම
මෙවැනි මූලික Python ගුණාංගයන් පිළිබඳ වැරදි අවබෝධය, නවකයන් සහ ඉගෙනුම් මට්ටම අඩු දැනුමක් ඇති සිසුන්ට වැඩි ගැටළු උදා කරයි. අපගේ තාක්ෂණික ශිෂ්යයන්ට class variable සහ instance variable අතර වෙනස හොඳින් තේරුම් ගත යුතුයි, එවිට කේතයේ අනපේක්ෂිත bug ගොඩනැගීම වැළැක්විය හැක.
දේශීය software companies සඳහා, මෙවැනි මූලික වැරදි අඩු කර ගැනීම, වැඩි ප්රමිතියකින් පවත්වාගෙන යාමට, කාර්ය සාධනය වැඩි කිරීමට සහ ගනුදෙනුකරුවන්ට විශ්වාසනීය පද්ධති ලබා දීමට උපකාරී වේ.
ඉදිරිපත් කරන විසඳුම සරලයි: settings variable එක __init__ method එක තුළ නිර්මාණය කිරීම. මෙයින්, වස්තු සෑම එකක්ම තමන්ගේම dict එකක් ගන්නා බැවින්, එකක් මත කරන වෙනස්කම් අනෙකාට බලපාන්නේ නැත.
අවසන් වශයෙන්, Python interview වල මෙවැනි ප්රශ්න ඇවිල්ලෙයි, එමඟින් අපේ අපේක්ෂකයන් class attribute සහ instance attribute පිළිබඳ ගැඹුරු අවබෝධයක් තිබේදැයි පරීක්ෂා කරනවා. එබැවින්, Python කේත ලිවීමේදී attribute resolution ක්රමය මත අවධානය යොමු කිරීම අත්යවශ්යයි.
ඔබත් මෙවැනි ගැටළුවක් මුහුණ දී ඇත්නම්, class variable එකක් mutable object (list, dict) වශයෙන් භාවිතා කරන විට, ඒක instance level එකට ගෙන එන්න __init__ තුළ නිර්මාණය කරන්න. එවිට ඔබේ කේතය නිශ්චිතව, පැහැදිලිව, සහ අනාගතයේද පවත්වාගත හැක.