ऐसा करने का एक आसान तरीका होना चाहिए, लेकिन किसी भी तरह से मैं इसके चारों ओर अपने सिर को लपेट सकता हूं। मैं जो चाहता हूं उसका वर्णन करने का सबसे अच्छा तरीका एक वर्ग के लिए लैम्ब्डा फ़ंक्शन है। मेरे पास एक लाइब्रेरी है जो एक वर्ग के साथ काम करने के लिए एक वर्ग के एक uninstantiated संस्करण के रूप में उम्मीद है। इसके बाद कक्षा को स्वयं काम करने के लिए तत्काल बनाता है। समस्या यह है कि मैं लाइब्रेरी को पास करने के लिए कक्षा के संस्करणों को गतिशील रूप से बनाने में सक्षम होना चाहता हूं, लेकिन मुझे यह नहीं पता कि पुस्तकालय एक अनइंस्टेन्टेड संस्करण की अपेक्षा करता है।पायथन में कक्षाओं के लिए Lambda समारोह?
class Double:
def run(self,x):
return x*2
class Triple:
def run(self,x):
return x*3
class Multiply:
def __init__(self,mult):
self.mult = mult
def run(self,x):
return x*self.mult
class Library:
def __init__(self,c):
self.c = c()
def Op(self,val):
return self.c.run(val)
op1 = Double
op2 = Triple
#op3 = Multiply(5)
lib1 = Library(op1)
lib2 = Library(op2)
#lib3 = Library(op3)
print lib1.Op(2)
print lib2.Op(2)
#print lib3.Op(2)
मैं, सामान्य गुणा वर्ग उपयोग नहीं कर सकते क्योंकि मैं इसे पहले दृष्टांत चाहिए जो पुस्तकालय टूट जाता है "AttributeError: गुणा उदाहरण नहीं कॉल विधि है" नीचे कोड समस्या का वर्णन है। पुस्तकालय वर्ग को बदलने के बिना, क्या मैं ऐसा कर सकता हूं?
एक सामान्य कनवर्टर का उपयोग कर, ज़ाहिर है, यह है कि यह सिद्धांत रूप में स्वीकार करेंगे किसी भी एक-आर्ग समारोह, स्पष्ट रूप से अपनी कक्षाओं –
मैं createMultiplier() फंक्शन की तरह परिभाषित करने के लिए की आवश्यकता होगी, से आगे कार्यान्वयन को मुक्त है का लाभ। सुरुचिपूर्ण। – Deestan
मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन यहां कुछ ध्यान देने योग्य है। createMultiplier (4)! = createMultiplier (4)। ऐसा इसलिए है क्योंकि कक्षा दो अलग-अलग मेमोरी स्थानों में दो बार बनाई गई है।जब तक मल्टीप्ली में मेटाक्लास नहीं होता है जो कक्षाओं की तुलना करने के लिए डिफ़ॉल्ट व्यवहार को ओवरराइड करता है, तो आपको उत्पादित वर्ग ऑब्जेक्ट को कैश करने के लिए एक सरल शब्दकोश बनाना चाहिए। निर्देश एन द्वारा की जाएगी, और मूल्य कक्षाएं होगी। लेकिन यदि कक्षाओं का एक समूह बनाया जाता है लेकिन अप्रयुक्त होता है तो यह स्मृति कुशल नहीं हो सकता है। गुणा करने के लिए कक्षा विशेषता को संलग्न करना सबसे आसान तरीका है। जैसे Multiply.x = 5। –