এছাড়াও আপনাকে এটি করার অনুমতি দেয়: (সংক্ষেপে, অনুরোধ করা 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
অবশ্যই জাভা এবং সি # এর মতো ভাষাগুলিতে কল্পনা করা শক্ত is স্ব-রেফারেন্সকে সুস্পষ্ট করে তোলার মাধ্যমে, আপনি সেই স্ব-রেফারেন্স দ্বারা যে কোনও বস্তুর রেফারেন্স করতে পারেন free এছাড়াও, রানটাইমের সময় ক্লাসগুলির সাথে খেলার এই পদ্ধতিটি আরও স্থির ভাষায় করা আরও কঠিন - এটি প্রয়োজনীয় বা ভাল নয়। সুস্পষ্ট স্ব-স্বরূপেই এই সমস্ত উন্মত্ততা বিদ্যমান থাকতে দেয়।
তদুপরি, এটি কল্পনা করুন: আমরা পদ্ধতির আচরণ (প্রোফাইলিং বা কিছু ক্রেজি কালো যাদু করার জন্য) কাস্টমাইজ করতে চাই। এটি আমাদের ভাবতে পরিচালিত করতে পারে: যদি আমাদের এমন একটি শ্রেণি থাকত 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
ম্যাজিকমেথড উদাহরণের সাথে আবদ্ধ হবে । অদ্ভুত হাহ? এটি 2 কীওয়ার্ড this1
এবং this2
জাভা এবং সি # এর মতো ভাষায় থাকার মতো। এর মতো ম্যাজিক ফ্রেমওয়ার্কগুলিকে এমন স্টাফ তৈরি করতে দেয় যা অন্যথায় অনেক বেশি ভারবোস হয়।
আবার, আমি এই স্টাফের নীতি সম্পর্কে মন্তব্য করতে চাই না। আমি কেবল এমন জিনিসগুলি প্রদর্শন করতে চেয়েছিলাম যা একটি স্পষ্ট স্ব-রেফারেন্স ছাড়াই করা কঠিন।
self
এক্সেস সদস্যদের - stackoverflow.com/questions/910020/...