कक्षा का उपयोग क्यों करें? क्योंकि यह काम को आसान बनाता है, यह मानते हुए कि आप ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग करना जानते हैं, और यह मानते हुए कि आप एक गैर-तुच्छ GUI लिख रहे हैं। वस्तुओं का उपयोग करने से आप आसानी से अपने कोड को उन मॉड्यूलर इकाइयों में विभाजित कर सकते हैं जो स्वयं निहित हैं, और आपके कोड को सामान्य रूप से संशोधित करना एक सर्वोत्तम अभ्यास माना जाता है।
GUI प्रोग्रामिंग आसानी से एक ऑब्जेक्ट-ओरिएंटेड स्टाइल के लिए उधार देता है, क्योंकि GUI पूरी तरह से वस्तुओं से बना है - लेबल, बटन, स्क्रॉलबार, टेक्स्ट क्षेत्र, आदि। चूंकि आप पहले से ही वस्तुओं का उपयोग कर रहे हैं, अपने कोड को बड़ी वस्तुओं में व्यवस्थित करने से समझ में आता है। । टूलबार एक ऑब्जेक्ट है, स्टेटबार एक ऑब्जेक्ट है, नेविगेशन पेन एक ऑब्जेक्ट है, मुख्य क्षेत्र एक ऑब्जेक्ट है, प्रत्येक नोटबुक टैब एक ऑब्जेक्ट है, और इसी तरह।
यहां तक कि जब आपका कोड बहुत जटिल नहीं होता है, तो अधिक व्यावहारिक दृष्टिकोण से यह आपको उस फ़ंक्शन की परिभाषा की तुलना में फ़ाइल में पहले बाइंडिंग और कॉलबैक को परिभाषित करने देता है, जो मुझे लगता है कि बहुत अधिक समझ में आता है।
उदाहरण के लिए, एक साधारण उदाहरण पर विचार करें (यह मानते हुए कि टिंकर आयात किया गया है जैसे import tkinter as tk
(पायथन 3) या पाइथन 2 import Tkinter as tk
):
def quit(event=None):
sys.exit()
root = tk.Tk()
label = tk.Label(root, text="Hello, world")
label.pack()
label.bind("<1>", quit)
root.mainloop()
मेरे लिए, उस कोड का प्रवाह सभी गलत है। इससे पहले कि मैं इसे संदर्भित करता हूं, मुझे रूट विधि को परिभाषित करना होगा, और रूट विंडो के निर्माण और मेनलूप के लिए कॉल अन्य सभी कोड द्वारा अलग किए गए हैं।
कक्षाओं का उपयोग करके, हालांकि, मैं कोड को अधिक प्राकृतिक क्रम में लिख सकता हूं:
class MyWindow(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Hello, world")
label.pack()
label.bind("<1>", self.quit)
def quit(self, event=None):
sys.exit()
root = tk.Tk()
MyWindow(root).pack()
root.mainloop()
GUI का मुख्य निकाय फ़ाइल के शीर्ष पर सही है, और सहायक कोड इसके नीचे है। अब, ज़ाहिर है, आप एक ही चीज़ को प्राप्त करने के लिए फ़ंक्शन का उपयोग कर सकते हैं। हालांकि, मेरी राय में, कक्षाएं इसे थोड़ा आसान बनाती हैं।
एक और लाभ यह है कि मैं अब आसानी से "मुख्य" विंडो (और वीज़ा वर्सा) के बारे में कुछ भी बदलने के बिना युक्त विंडो को आसानी से बदल सकता हूं। यही है, मैं मुख्य GUI में सीमाएँ, या एक नया अनुभाग जोड़ सकता हूं, लेकिन मुझे MyWindow के अंदर कोड की एक भी पंक्ति को स्पर्श करने की आवश्यकता नहीं है। कंट्रास्ट कोड के साथ, जहां आपको label.pack()
बयान बदलना पड़ सकता है , और यूआई में अन्य सभी विगेट्स के पैक (या ग्रिड) स्टेटमेंट के साथ कंट्रास्ट करें ।
हालांकि, कहा जा रहा है कि किसी वस्तु उन्मुख दृष्टिकोण का उपयोग करना अच्छा, स्वच्छ, बनाए रखने योग्य कोड लिखने के लिए आवश्यक नहीं है। यह हो सकता है, लेकिन यह खराब कोड भी हो सकता है। दिन के अंत में, एक वस्तु-उन्मुख दृष्टिकोण केवल एक उपकरण है। आप इसका उपयोग करते हैं या नहीं, और क्या आप इसे सही तरीके से उपयोग करते हैं या नहीं यह बहुत सारे कारकों पर निर्भर करता है। तो यह बहुत अच्छी तरह से हो सकता है कि आपके लिए, और आपके द्वारा लिखे गए कोड के लिए , एक कार्यात्मक शैली पूरी तरह से स्वीकार्य है। मुझे लगता है कि आप पाएंगे कि जैसे-जैसे आपके कार्यक्रम अधिक जटिल होते जाते हैं, एक वस्तु-उन्मुख दृष्टिकोण आपके कोड को व्यवस्थित और बनाए रखना आसान बना देगा।