2016-03-09 5 views
6

पायलिंट ने मुझे बताया कि मेरी कक्षा विधियों में से एक को एक विधि होने की आवश्यकता नहीं है, लेकिन केवल कक्षा में एक समारोह हो सकता है क्योंकि उसने किसी वर्ग विशेषता का उपयोग नहीं किया है। इससे मुझे चीजें होती हैं जो मैंने सोचा था कि "बुरा" था, लेकिन शायद वे पाइथोनिक हैं। क्या निम्न कोड है जो पाइथन हमें करना चाहता है?क्या यह क्लास विधि के अंदर फ़ंक्शन को परिभाषित करने के लिए अन-पायथनिक है?

class TestClass(ParentClass): 
    def __init__(self): 
     def callbackfunction(text): 
      print("hello") 
     ParentClass.map_event_to_callback(ParentClass.event, callbackfunction) 

जहां ParentClass.event का उत्सर्जन करता है अपनी कॉलबैक करने text, लेकिन हम अभी बजाय कि प्रिंट "hello" ध्यान नहीं देंगे। और भी आसान:

class TestClass(): 
    def __init__(self, text): 
     def printhello(text): 
      print("hello") 
     printhello(text) 

संभालने के बारे में मैं text या printhello__init__ के बाद परवाह नहीं है।

+7

नहीं, ठीक है। आप भी 'लैम्ब्डा' का उपयोग कर सकते हैं। –

+2

किसी विधि के भीतर एक फ़ंक्शन वास्तव में फ़ंक्शन के भीतर किसी फ़ंक्शन से अलग नहीं होता है। कभी-कभी यह समझ में आता है, और जब ऐसा होता है, तो इसका उपयोग करने का कोई कारण नहीं है। –

+0

धन्यवाद, @MartijnPieters और @TomKarzes! एक वर्ग '__init__' के अंदर एक कॉलबैक फ़ंक्शन डालने से मुझे गंदा महसूस हुआ, लेकिन मुझे नहीं पता था कि इससे बचने के लिए तकनीकी कारण था या नहीं। @MartijnPieters, अगर आप अपनी टिप्पणी का उत्तर देते हैं तो मैं इसे चुन सकता हूं। –

उत्तर

1

कॉलबैक के लिए नेस्टेड फ़ंक्शन बनाना ठीक है। यह उस कार्य को पैरेंट फ़ंक्शन (बंद होने के रूप में) में किसी भी स्थानीय लोगों तक पहुंच प्रदान करता है।

आप एक lambda उपयोग कर सकते हैं अगर आप सभी पर अमल करने की जरूरत है एक अभिव्यक्ति है:

class TestClass(ParentClass): 
    def __init__(self): 
     ParentClass.map_event_to_callback(ParentClass.event, lambda text: print("hello")) 
संबंधित मुद्दे

 संबंधित मुद्दे