পাইথন পদ্ধতিতে আপনার স্পষ্টতই "স্ব" যুক্তি থাকা দরকার কেন?


196

পাইথনের ক্লাসে কোনও পদ্ধতির সংজ্ঞা দেওয়ার সময়, এটি এমন কিছু দেখায়:

class MyClass(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

তবে অন্য কয়েকটি ভাষায়, যেমন সি # তে, আপনার কাছে সেই অবজেক্টের একটি রেফারেন্স রয়েছে যে পদ্ধতিটি প্রোটোটাইপটিতে আর্গুমেন্ট হিসাবে ঘোষণা না করে পদ্ধতি "এই" কীওয়ার্ডের সাথে আবদ্ধ।

এটি কি পাইথনের ইচ্ছাকৃত ভাষা নকশার সিদ্ধান্ত ছিল নাকি কিছু বাস্তবায়নের বিশদ রয়েছে যা "স্ব" কে তর্ক হিসাবে প্রেরণ প্রয়োজন?


15
আমি বাজি ধরতে পারি আপনার কাছে জেনেশুনে কেন আপনি তাদের স্পষ্টভাবে লিখতে প্রয়োজন করতে আগ্রহী হবে selfএক্সেস সদস্যদের - stackoverflow.com/questions/910020/...
পাযত্র Dobrogost

1
তবে এটি দেখতে বয়লার প্লেটটি যদিও দেখায়
রঘুবীর

কিছুটা বিভ্রান্তিকর তবে স্ট্যাকওভারফ্লো.com/
1815624

উত্তর:


91

আমি পিটারস জেন অফ পাইথনের উদ্ধৃতি দিতে পছন্দ করি। "অন্তর্নিহিতের চেয়ে সুস্পষ্ট ভাল" "

জাভা এবং সি ++-তে, ' this.' কে ছাড় দেওয়া যেতে পারে, যখন আপনার পরিবর্তনশীল নামগুলি বাদ দেওয়া অসম্ভব হয়। সুতরাং আপনার কখনও কখনও এটি প্রয়োজন এবং কখনও কখনও প্রয়োজন হয় না।

পাইথন কোনও নিয়মের উপর নির্ভর করে এই বিষয়টিকে সুস্পষ্ট করার জন্য নির্বাচন করে।

অতিরিক্তভাবে, যেহেতু কিছুই নিহিত বা অনুমানিত নয়, বাস্তবায়নের অংশগুলি উন্মোচিত হয়। self.__class__, self.__dict__এবং অন্যান্য "অভ্যন্তরীণ" কাঠামো একটি সুস্পষ্ট উপায়ে উপলভ্য।


53
যদিও আপনি এটি ভুলে গেলে কম ক্রিপ্টিক ত্রুটি বার্তাটি দেওয়া ভাল হবে।
মার্টিন বেকেট

9
যাইহোক আপনি যখন কোনও পদ্ধতি কল করেন তখন আপনাকে অবজেক্ট ভেরিয়েবলটি পাস করতে হবে না, তা কী স্পষ্টকীকরণের নিয়ম ভঙ্গ করে না? যদি এই জেনটি রাখতে হয় তবে এটির মতো কিছু হতে হবে: অবজেক্ট.মোথড (অবজেক্ট, প্যারাম 1, প্যারাম 2)। দেখে মনে হচ্ছে কোনওভাবেই বেমানান ...
বেদমন্ত

10
"সুস্পষ্টর চেয়ে ভাল সুস্পষ্ট" - পাইথনের "স্টাইল" কি আশেপাশে নির্মিত বিষয়গুলি অন্তর্নিহিত নয়? উদাহরণস্বরূপ অন্তর্নিহিত ডেটা প্রকার, অন্তর্ভুক্ত ফাংশন সীমানা (কোনও {s 'গুলি), অন্তর্নিহিত ভেরিয়েবল স্কোপ ... যদি মডিউলগুলিতে বিশ্বব্যাপী চলকগুলি ফাংশনে উপলব্ধ থাকে ... তবে কেন সেই একই যুক্তি / যুক্তি ক্লাসগুলিতে প্রয়োগ করা উচিত নয়? সরল নিয়মটি ইন্ডেন্টেশন দ্বারা নির্ধারিত হিসাবে "উচ্চ স্তরের ঘোষিত কিছু কি নিম্ন স্তরে পাওয়া যায়"?
সাইমন

13
"সুস্পষ্টর চেয়ে ভাল আরও ভাল" বোকামি সনাক্ত করা হয়েছে
ওয়াহিদ আমিরি

10
আসুন এটির মুখোমুখি হোন, এটি ঠিক খারাপ। এই জন্য কোন অজুহাত নেই। এটি কেবল একটি কুৎসিত অবশেষ তবে এটি ঠিক আছে।
তোসকান

62

এটি পদ্ধতি এবং ফাংশনগুলির মধ্যে পার্থক্য হ্রাস করতে হয়। এটি আপনাকে মেটাক্লাসগুলিতে সহজেই পদ্ধতিগুলি তৈরি করতে বা রান-টাইমে প্রাক-বিদ্যমান ক্লাসে পদ্ধতি যুক্ত করতে দেয়।

যেমন

>>> class C(object):
...     def foo(self):
...         print "Hi!"
...
>>>
>>> def bar(self):
...     print "Bork bork bork!"
...
>>>
>>> c = C()
>>> C.bar = bar
>>> c.bar()
Bork bork bork!
>>> c.foo()
Hi!
>>>

এটি (যতদূর আমি জানি) অজগর রানটাইমের প্রয়োগ আরও সহজ করে তোলে।


10
এটির জন্য +1 এর পদ্ধতি এবং কার্যকারিতাগুলির মধ্যে পার্থক্য হ্রাস করা। এটি উত্তর গ্রহণ করা উচিত
ব্যবহারকারী

এটি গাইডোর অনেক সংযুক্ত ব্যাখ্যার মূলে।
মার্সিন

1
এটি এছাড়াও দেখায় যে পাইথনে, আপনি সি.বার () করার পরে প্রথমে এটি বৈশিষ্ট্যের জন্য উদাহরণটি পরীক্ষা করে, তারপরে এটি শ্রেণীর বৈশিষ্ট্যগুলি পরীক্ষা করে । সুতরাং আপনি কোনও ক্লাসে যে কোনও সময় কোনও ডেটা বা ফাংশন (অবজেক্টস) 'সংযুক্ত' করতে পারেন এবং এর উদাহরণটিতে অ্যাক্সেসের আশা করতে পারেন (যেমন দির (উদাহরণ) এটি কেমন হবে)। আপনি যখন সি-ইনস্ট্যান্সটি "তৈরি" করেছিলেন কেবল তখনই নয়। এটি খুব গতিশীল।
নিশান্ত

10
আমি সত্যিই এটি কিনতে না। এমনকি আপনার যে ক্ষেত্রে প্যারেন্ট ক্লাসের প্রয়োজন সেখানে আপনি মৃত্যুদন্ড কার্যকর করার পরেও এটি নির্ধারণ করতে পারেন। উদাহরণস্বরূপ পদ্ধতিগুলি এবং শ্রেণীর ফাংশনগুলির মধ্যে পাস করা দৃষ্টান্তগুলির মধ্যে সমতা নির্বোধ; এগুলি ছাড়া রুবি ঠিকঠাক কাজ করে।
জাচায়সান

2
জাভাস্ক্রিপ্ট আপনাকে রান-টাইমে কোনও বস্তুর সাথে পদ্ধতি যুক্ত করার অনুমতি দেয় selfএবং ফাংশন ঘোষণায় এটির প্রয়োজন হয় না (মনে রাখবেন, সম্ভবত এটি কাচের ঘর থেকে পাথর নিক্ষেপ করছে, যেহেতু জাভাস্ক্রিপ্টে কিছু সুন্দর কৌশলযুক্ত thisবাঁধাকৃত শব্দার্থক শব্দ রয়েছে)
জনাথন বেন

55

আমি পরামর্শ দিচ্ছি যে এই বিষয়টিতে গাইডো ভ্যান রসমের ব্লগটি পড়া উচিত - কেন স্বতঃস্ফূর্তভাবে নিজেকে থাকতে হবে

যখন কোনও পদ্ধতির সংজ্ঞাটি সজ্জিত করা হয়, আমরা স্বয়ংক্রিয়ভাবে এটিকে একটি 'স্ব' পরামিতি দেবো কিনা তা আমরা জানি না: ডেকোররেটরটি ফাংশনটিকে একটি স্থিতিশীল পদ্ধতিতে রূপান্তর করতে পারে (যার কোনও 'স্ব' নেই), বা শ্রেণি পদ্ধতিতে (যা কোনও শ্রেণি পদ্ধতি) একটি মজার ধরণের স্ব রয়েছে যা উদাহরণের পরিবর্তে কোনও শ্রেণিকে বোঝায়) বা এটি সম্পূর্ণ আলাদা কিছু করতে পারে (খাঁটি পাইথনে '@ ক্লাসমেডোথড' বা '@ স্ট্যাটিকমেডোথার' প্রয়োগ করে এমন একটি সজ্জা লেখার ক্ষেত্রে এটি তুচ্ছ)। জড়িত 'স্ব' যুক্তি দিয়ে পদ্ধতিটি সংজ্ঞায়িত করা উচিত কিনা তা সজ্জাকারী কী করেন তা জেনে উপায় নেই।

আমি স্পেশাল কেসিং '@ ক্লাসমেডোথড' এবং '@ স্ট্যাটিকমেডোথ' এর মতো হ্যাকগুলি প্রত্যাখ্যান করি।


16

পাইথন আপনাকে "স্ব" ব্যবহারে জোর করে না। আপনি যে নামটি চান তা এটি দিতে পারেন। আপনাকে কেবল মনে রাখতে হবে যে কোনও পদ্ধতি সংজ্ঞা শিরোনামে প্রথম যুক্তিটি হ'ল অবজেক্টের একটি রেফারেন্স।


কনভেনশন অনুসারে, এটি উদাহরণস্বরূপ বা 'ক্লাস' এর ক্ষেত্রে 'স্ব' হওয়া উচিত যেখানে প্রকারের সাথে জড়িত (
মিমি মিমি

1
এটি প্রতিটি পদ্ধতিতে নিজেকে প্রথমে পরম হিসাবে রাখতে বাধ্য করে, কেবলমাত্র অতিরিক্ত পাঠ্য যা আমার পক্ষে তেমন অর্থ দেয় না। অন্যান্য ভাষাগুলি এটি দিয়ে ঠিক কাজ করে।
বেদমন্ত

আমি কি সঠিক ? সর্বদা প্রথম প্যারামিটারটি বস্তুর একটি রেফারেন্স।
মোহাম্মদ মাহদী কাউচাক ইয়াজদী

@ এমএমকিওয়াই না, উদাহরণস্বরূপ @staticmethodএটি নেই।
চিহ্নিত করুন

1
"আপনাকে কেবল মনে রাখতে হবে যে কোনও পদ্ধতির সংজ্ঞায় প্রথম যুক্তি ..." আমি "স্ব" শব্দটি "কুইজিবিও" পরিবর্তন করার চেষ্টা করেছি এবং এটি এখনও কার্যকর হয়েছে। সুতরাং প্রায়শই ব্যাখ্যা করা হয়েছে, এটি "স্ব" শব্দটি গুরুত্বপূর্ণ নয়, তবে সেই স্থানটি (?) যেটি দখল করে তার অবস্থান
আরবিভি

7

এছাড়াও আপনাকে এটি করার অনুমতি দেয়: (সংক্ষেপে, অনুরোধ করা 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জাভা এবং সি # এর মতো ভাষায় থাকার মতো। এর মতো ম্যাজিক ফ্রেমওয়ার্কগুলিকে এমন স্টাফ তৈরি করতে দেয় যা অন্যথায় অনেক বেশি ভারবোস হয়।

আবার, আমি এই স্টাফের নীতি সম্পর্কে মন্তব্য করতে চাই না। আমি কেবল এমন জিনিসগুলি প্রদর্শন করতে চেয়েছিলাম যা একটি স্পষ্ট স্ব-রেফারেন্স ছাড়াই করা কঠিন।


4
আমি যখন আপনার প্রথম উদাহরণটি বিবেচনা করি, তখন আমি জাভাতেও একই কাজ করতে পারি: OuterClass.thisবাইরের শ্রেণি থেকে 'স্ব' পাওয়ার জন্য অভ্যন্তরীণ শ্রেণীর কল করা দরকার , তবে আপনি এখনও thisনিজের উল্লেখ হিসাবে ব্যবহার করতে পারেন ; পাইথনে আপনি এখানে যা করেন তার সাথে খুব মিল। আমার পক্ষে এটি ধারণা করা কঠিন ছিল না। এটি প্রশ্নে ভাষার দক্ষতার উপর নির্ভর করে?
klaar

তবে আপনি যখন কোনও বেনাম শ্রেণীর কোনও পদ্ধতির অভ্যন্তরে কোনও বেনাম শ্রেণীর অভ্যন্তরীণ সংজ্ঞাযুক্ত Something, যা ইন্টারফেসের একটি বেনামে প্রয়োগের অভ্যন্তরে সংজ্ঞায়িত হয়, যা অন্য কোনও বেনামে প্রয়োগের ভিতরে সংজ্ঞায়িত হয় তখনও আপনি কোনও স্কোপগুলি উল্লেখ করতে পারেন Something? পাইথনে আপনি অবশ্যই স্কোপগুলির কোনও উল্লেখ করতে পারেন।
ভ্লাদ-আরডিলিয়ান

আপনি ঠিক বলেছেন, জাভাতে আপনি কেবল তার সুস্পষ্ট শ্রেণীর নামটি কল করে বাইরের ক্লাসটি উল্লেখ করতে পারেন এবং এটি উপসর্গটিতে ব্যবহার করতে পারেন this। অন্তর্নিহিত রেফারেন্সগুলি জাভাতে ইমপোসিব্রু।
ক্লার

আমি যদি ভাবছি যে এটি কাজ করে তবে: প্রতিটি স্কোপে (প্রতিটি পদ্ধতিতে) একটি স্থানীয় ভেরিয়েবল থাকে, যা thisফলাফলকে উল্লেখ করে । উদাহরণস্বরূপ Object self1 = this;(হয় অবজেক্ট ব্যবহার করুন, বা কিছু কম জেনেরিক)। তারপর, আপনি উচ্চতর সুযোগ মধ্যে পরিবর্তনশীল এক্সেস আছে তাহলে, আপনি অ্যাক্সেস করতে পারে self1, self2... selfn। আমি মনে করি এগুলি চূড়ান্ত বা কিছু হিসাবে ঘোষণা করা উচিত, তবে এটি কার্যকর হতে পারে।
ভ্লাদ-আরডিলিয়ান

3

আমি মনে করি "পাইথনের জেন" ছাড়াও আসল কারণ হ'ল ফাংশনগুলি পাইথনের প্রথম শ্রেণির নাগরিক।

যা তাদেরকে মূলত অবজেক্ট করে তোলে। এখন মৌলিক বিষয়টি হ'ল যদি আপনার ফাংশনগুলিও সেই সাথে অবজেক্ট থাকে তবে অবজেক্ট ওরিয়েন্টেড দৃষ্টান্তে আপনি যখন কীভাবে বার্তাগুলি বার্তা প্রেরণ করবেন যখন বার্তাগুলি নিজেই অবজেক্ট হয়?

মুরগির ডিমের সমস্যার মতো দেখতে এই প্যারাডক্সটিকে হ্রাস করার একমাত্র সম্ভাব্য উপায় হ'ল হয় মৃত্যুদন্ড কার্যকর করার প্রসঙ্গটি পদ্ধতিগুলিতে পাস করা বা এটি সনাক্ত করা। তবে পাইথন যেহেতু বাসা বেঁধে থাকতে পারে তাই করা অসম্ভব কারণ মৃত্যুর প্রসঙ্গটি অভ্যন্তরীণ ফাংশনগুলির জন্য পরিবর্তিত হবে would

এর অর্থ একমাত্র সম্ভাব্য সমাধান হ'ল স্পষ্টভাবে 'স্ব' (মৃত্যুদন্ডের প্রসঙ্গ) পাস করা pass

সুতরাং আমি বিশ্বাস করি এটি একটি বাস্তবায়ন সমস্যা যা জেন অনেক পরে এসেছিল।


হাই আমি অজগর থেকে নতুন (জাভা ব্যাকগ্রাউন্ড থেকে) এসেছি এবং আপনি যা বলেছিলেন তা আমি পুরোপুরি প্রবাহিত করি নি "যখন বার্তাগুলি নিজেরাই বস্তু হয় তবে আপনি কীভাবে অবজেক্টগুলিতে বার্তা প্রেরণ করবেন"। কেন যে সমস্যা, আপনি বিস্তারিত বলতে পারেন?
কিয়ুলং

1
@ কিউলাং আ, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কলিং পদ্ধতিতে অবজেক্টগুলিতে কোনও পে-লোড (বা আপনার ফাংশনের পরামিতি) ছাড়াই বা অবজেক্টগুলিতে বার্তা প্রেরণের সমান। অভ্যন্তরীণ পদ্ধতিগুলি কোনও শ্রেণি / অবজেক্টের সাথে সম্পর্কিত কোডের একটি ব্লক হিসাবে উপস্থাপিত হবে এবং এটি যে বস্তুর বিরুদ্ধে প্রেরণ করা হয়েছে তার মাধ্যমে এটি উপলব্ধ অন্তর্ভুক্ত পরিবেশকে ব্যবহার করবে। তবে যদি আপনার পদ্ধতিগুলি অবজেক্ট হয় তবে তারা কোনও শ্রেণি / অবজেক্টের সাথে যুক্ত হওয়ার কারণে স্বাধীনভাবে উপস্থিত থাকতে পারে যা আপনি যদি এই পদ্ধতিটির অনুরোধ করেন তবে এটি কোন পরিবেশের বিরুদ্ধে চলে?
পঙ্কজডহরে

সুতরাং একটি পরিবেশ সরবরাহ করার জন্য একটি ব্যবস্থা অবশ্যই থাকতে হবে, স্ব-এর অর্থ হবে কার্যকর পরিবেশের সময় বর্তমান পরিবেশ তবে আপনি অন্য একটি পরিবেশও সরবরাহ করতে পারেন।
পঙ্কজডহরে

2

আমি মনে করি এটি পিইপি 227 এর সাথে করার আছে:

শ্রেণীর ক্ষেত্রের নামগুলি অ্যাক্সেসযোগ্য নয়। নামগুলি অভ্যন্তরীণ ঘেরের ফাংশন স্কোপে সমাধান করা হয়। যদি কোনও শ্রেণি সংজ্ঞা নেস্টেড স্কোপগুলির একটি শৃঙ্খলে ঘটে তবে রেজোলিউশন প্রক্রিয়া শ্রেণীর সংজ্ঞাগুলি এড়িয়ে যায়। এই নিয়মটি শ্রেণীর বৈশিষ্ট্য এবং স্থানীয় পরিবর্তনশীল অ্যাক্সেসের মধ্যে বিজোড় মিথস্ক্রিয়াটিকে বাধা দেয়। যদি কোনও শ্রেণীর সংজ্ঞায় নাম বাঁধার অপারেশন ঘটে থাকে, তবে ফলাফলকারী শ্রেণীর অবজেক্টের উপর এটি একটি অ্যাট্রিবিউট তৈরি করে। কোনও পদ্ধতিতে এই ভেরিয়েবলটি অ্যাক্সেস করতে বা কোনও পদ্ধতির অভ্যন্তরে কোনও ফাংশনে অ্যাক্সেসের জন্য, কোনও অ্যাট্রিবিউট রেফারেন্স ব্যবহার করতে হবে, তা স্ব দ্বারা বা শ্রেণীর নামের মাধ্যমে।


1

পাইথন, ডেমাইসফাইডে স্ব- হিসাবে ব্যাখ্যা করা হয়েছে

জেজ.মেথের মতো কিছু (আরগস) হয়ে যায় Class.meth (اعتراض, আরগস)। কলিং প্রক্রিয়াটি স্বয়ংক্রিয় হয় যখন গ্রহণের প্রক্রিয়াটি নয় (এটি স্পষ্টভাবে)। এই কারণে ক্লাসে কোনও ক্রমের প্রথম প্যারামিটারটি অবশ্যই অবজেক্ট হতে হবে।

class Point(object):
    def __init__(self,x = 0,y = 0):
        self.x = x
        self.y = y

    def distance(self):
        """Find distance from origin"""
        return (self.x**2 + self.y**2) ** 0.5

পারস্পরিক আমন্ত্রণ:

>>> p1 = Point(6,8)
>>> p1.distance()
10.0

init () তিনটি পরামিতি সংজ্ঞায়িত করে তবে আমরা কেবল দুটি (6 এবং 8) পাস করেছি। একইভাবে দূরত্ব () এর একটি প্রয়োজন তবে শূন্য আর্গুমেন্টগুলি পাস করা হয়েছিল।

পাইথন কেন এই আর্গুমেন্ট নম্বরটির সাথে মেলে না অভিযোগ ?

সাধারণত, যখন আমরা কোনও যুক্তি দিয়ে কোনও পদ্ধতি কল করি, তখন প্রথম শ্রেণীর যুক্তির আগে পদ্ধতির অবজেক্টটি রেখে সংশ্লিষ্ট শ্রেণি ফাংশনটি ডাকা হয়। সুতরাং ,জেজ.মেথের মতো কিছু (আরগস) ক্লাস.মেথ (আপত্তি, আরগস) হয়ে যায়। কলিং প্রক্রিয়াটি স্বয়ংক্রিয় হয় যখন গ্রহণের প্রক্রিয়াটি নয় (এটি স্পষ্টভাবে)।

এই কারণে ক্লাসে কোনও ক্রমের প্রথম প্যারামিটারটি অবশ্যই অবজেক্ট হতে হবে। এই পরামিতিটি স্ব হিসাবে লেখা নিছক একটি সম্মেলন । এটি কোনও কীওয়ার্ড নয় এবং পাইথনের কোনও বিশেষ অর্থ নেই। আমরা অন্যান্য নামগুলি ব্যবহার করতে পারি (এর মতো) তবে আমি আপনাকে দৃ strongly়ভাবে পরামর্শ দিচ্ছি না যে এটি। স্ব বাদে অন্য নাম ব্যবহার করা বেশিরভাগ বিকাশকারীদের দ্বারা প্রত্যাখ্যান করা হয় এবং কোডের পাঠযোগ্যতা ("পঠনযোগ্যতা গণনা") হ্রাস করে।
...
ইন, প্রথম উদাহরণ সেলফ.এক্স হ'ল একটি উদাহরণ বৈশিষ্ট্য যেখানে এক্স স্থানীয় পরিবর্তনশীল। এগুলি এক নয় এবং বিভিন্ন নেমস্পেসে থাকে।

সেল্ফ ইজ হিজ টু স্টি

অনেকে সি ++ এবং জাভা এর মতো পাইথনে স্ব কীওয়ার্ড বানানোর প্রস্তাব দিয়েছেন এটি পদ্ধতিতে আনুষ্ঠানিক প্যারামিটার তালিকা থেকে সুস্পষ্ট স্বের অপ্রয়োজনীয় ব্যবহারকে বাদ দেবে। যদিও এই ধারণাটি আশাব্যঞ্জক বলে মনে হচ্ছে, এটি ঘটবে না। কমপক্ষে অদূর ভবিষ্যতে না। মূল কারণটি পিছনে সামঞ্জস্যতা । এখানে পাইথনের স্রষ্টার নিজে থেকে একটি ব্লগ এখানে ব্যাখ্যা করছে যে স্বতঃস্ফূর্ত স্ব কেন থাকতে হবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.