आपको यह करने की अनुमति भी देता है: (संक्षेप में, इनवोकिंग Outer(3).create_inner_class(4)().weird_sum_with_closure_scope(5)
12 पर वापस आ जाएगी, लेकिन ऐसा पागलपन के तरीकों से होगा।
class Outer(object):
def __init__(self, outer_num):
self.outer_num = outer_num
def create_inner_class(outer_self, inner_arg):
class Inner(object):
inner_arg = inner_arg
def weird_sum_with_closure_scope(inner_self, num)
return num + outer_self.outer_num + inner_arg
return Inner
बेशक, यह जावा और सी # जैसी भाषाओं में कल्पना करना कठिन है। आत्म संदर्भ को स्पष्ट करके, आप उस आत्म संदर्भ द्वारा किसी भी वस्तु को संदर्भित करने के लिए स्वतंत्र हैं। इसके अलावा, रनटाइम पर कक्षाओं के साथ खेलने का ऐसा तरीका अधिक स्थिर भाषाओं में करना कठिन है - ऐसा नहीं है कि यह आवश्यक रूप से अच्छा या बुरा है। यह सिर्फ इतना है कि स्पष्ट स्व इस सभी पागलपन को मौजूद होने की अनुमति देता है।
इसके अलावा, इसकी कल्पना करें: हम तरीकों के व्यवहार (प्रोफाइलिंग या कुछ पागल काले जादू के लिए) को अनुकूलित करना चाहते हैं। यह हमें सोचने के लिए प्रेरित कर सकता है: क्या होगा यदि हमारे पास एक वर्ग है Method
जिसका व्यवहार हम ओवरराइड या नियंत्रण कर सकते हैं?
यहाँ यह है:
from functools import partial
class MagicMethod(object):
"""Does black magic when called"""
def __get__(self, obj, obj_type):
# This binds the <other> class instance to the <innocent_self> parameter
# of the method MagicMethod.invoke
return partial(self.invoke, obj)
def invoke(magic_self, innocent_self, *args, **kwargs):
# do black magic here
...
print magic_self, innocent_self, args, kwargs
class InnocentClass(object):
magic_method = MagicMethod()
और अब: InnocentClass().magic_method()
उम्मीद की तरह काम करेंगे। विधि innocent_self
पैरामीटर के InnocentClass
साथ और magic_self
MagicMethod उदाहरण के लिए बाध्य होगी । अजीब हुह? यह 2 खोजशब्दों this1
और this2
जावा और C # जैसी भाषाओं में है। इस तरह से जादू फ्रेमवर्क को सामान करने की अनुमति देता है जो अन्यथा बहुत अधिक क्रिया होगी।
फिर, मैं इस सामग्री की नैतिकता पर टिप्पणी नहीं करना चाहता। मैं सिर्फ उन चीजों को दिखाना चाहता था जो एक स्पष्ट आत्म संदर्भ के बिना करना मुश्किल होगा।
self
सदस्यों तक पहुंचने के लिए स्पष्ट रूप से लिखने की आवश्यकता क्यों है - stackoverflow.com/questions/910020/…