हाल ही में मैं कर रहा हूँ बातें:कोड शैली - इस तरह अन्य कार्यों के अंदर कार्यों 'छुपा'
import Tkinter
class C(object):
def __init__(self):
self.root = Tkinter.Tk()
def f():
print 'hello'
self.button = Tkinter.Button(master=self.root, command=f, text='say hello')
के रूप में कुछ इस तरह का विरोध करने के:
import Tkinter
class C(object):
def __init__(self):
self.root = Tkinter.Tk()
self.button = Tkinter.Button(master=self.root, command=self.f, text='say hello')
def f(self):
print 'hello'
सवाल विशिष्ट नहीं है Tkinter करने के लिए, लेकिन यह एक अच्छा उदाहरण है। फ़ंक्शन f
केवल बटन के कॉलबैक के रूप में उपयोग किया जाता है, इसलिए मैंने इसे __init__
के अंदर परिभाषित करना चुना है। इस तरह, __init__
के अंदर केवल कोड को f
के अस्तित्व के बारे में पता है - बाहरी स्कॉप्स नामों से अव्यवस्थित होना शुरू नहीं करते हैं, और उपयोगकर्ता को आंतरिक होने के लिए डिज़ाइन किए गए तरीकों के बारे में परवाह करने की आवश्यकता नहीं है।
मेरा प्रश्न है: क्या इसे अच्छी शैली के रूप में माना जाता है? मैं चिंता कर रहा हूं क्योंकि मेरे पास बहुत सारे बटनों के साथ एक जीयूआई कक्षा है - __init__
बहुत सारी स्थानीय फ़ंक्शन परिभाषाओं के साथ बहुत लंबा लग रहा है। क्या कोई और उचित विकल्प है जिसका उपयोग करना चाहिए?
आप सही हैं, लेकिन मेरे उदाहरण के असली दुनिया संस्करण में, 'एफ' सिर्फ' प्रिंट 'हैलो से अधिक कर रहा है। यह एक लैम्ब्डा समारोह के अंदर फिट नहीं होगा। –
@poorsod - अगर यह उदाहरण का उपयोग नहीं कर रहा है, तो यह एक विधि नहीं होनी चाहिए। आप इसे मॉड्यूल लेवल फ़ंक्शन बना सकते हैं, या आप इसे जिस तरह से कर रहे हैं, उसे कर सकते हैं, लेकिन अगर आपको फ़ंक्शन में इंस्टेंस की आवश्यकता नहीं है तो मैं यहां एक विधि (या यहां तक कि एक staticmethod) का उपयोग नहीं करता। – mgilson
@mgilson: मुझे लगता है कि आप इस सवाल के बिंदु को याद करते हैं, जो कॉलबैक गैर-कार्यशील कार्य होना चाहिए। टिंकर कॉलबैक में अक्सर लैम्ब्डा को देखने का कारण कॉलबैक में स्थानीय तर्कों को बांधना है। कॉलबैक अक्सर अन्यत्र परिभाषित किया जाता है। –