আপনার "স্ব" দরকার কেন? পাইথনে উদাহরণ ভেরিয়েবলগুলি উল্লেখ করতে?


13

আমি জাভা, রুবি, হাস্কেল এবং পাইথনের মতো বেশ কয়েকটি ভাষায় প্রোগ্রামিং করছি। আমি যে বিভিন্ন প্রকল্পে কাজ করি তার জন্য আমাকে প্রতিদিন অনেকগুলি ভাষার মধ্যে স্যুইচ করতে হয়। এখন, বিষয়টি হ'ল আমি selfপাইথন একই ফাংশন সংজ্ঞায় প্রথম পরামিতি হিসাবে লিখতে ভুলে যাই একই জিনিসটিতে কল করার পদ্ধতিগুলির সাথে।

বলেছিল, পাইথনের এই পদ্ধতির দ্বারা আমি বেশ অবাক হয়েছি। মূলত জিনিসগুলি সম্পন্ন করতে আমাদের আরও টাইপ করতে হবে, জাভা এবং রুবির মতো ভাষাগুলি বর্তমান অবজেক্টে স্বয়ংক্রিয়ভাবে ভেরিয়েবলগুলি উল্লেখ করে সহজ করা হয়।

আমার প্রশ্ন কেন এটি selfপ্রয়োজনীয়? এটি কি নিখুঁতভাবে শৈলীর পছন্দ, বা জাথ selfএবং সি ++ আপনাকে যেভাবে বাদ দিতে দেয় পাইথন আপনাকে বাদ দিতে দেয় না তার কোনও কারণ আছে this?



1
@ এখনই ভাল উত্সাহিত করুন, এবং গুরুত্ব সহকারে এটি একটি ভাল প্রশ্ন যা আমাকে কয়েক দিন ধরেই হতাশ করে তুলছে, দয়া করে ভোটাভুটির মাধ্যমে এটিকে হত্যা করবেন না।
বিবেক

2
এই প্রশ্নটি স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / ২70০৯৮২২ / ২ দ্বারা পুরোপুরিভাবে কভার করা হয়েছে ।
ডেভিড আরনো

আমার বোধগম্যতা এটি প্রথম যুক্তি হিসাবে কোনও স্ট্রাক্টে একটি পয়েন্টারটি পাস করার সি-স্টাইলের উপর ভিত্তি করে তৈরি।
ড্যান্ন্নো

@staticmethodপদ্ধতি ঘোষণার আগে লিখন , ত্রুটিটি দমন করে (কেবল তথ্যের জন্য এবং প্রস্তাবিতও নয়)
যশ

উত্তর:


23

1) selfপদ্ধতি স্বাক্ষরগুলিতে সুস্পষ্ট পরামিতি হিসাবে কেন প্রয়োজনীয়?

কারণ পদ্ধতিগুলি ফাংশন এবং foo.bar(baz)কেবল সিনট্যাকটিক চিনি bar(foo, baz)। ক্লাসগুলি কেবল অভিধান যেখানে কয়েকটি মানগুলি ফাংশন। (কনস্ট্রাক্টররাও কেবল ফাংশন, এজন্য পাইথনের প্রয়োজন নেই new) আপনি বলতে পারেন পাইথন এটি স্পষ্ট করে তোলে যে সহজ উপাদানগুলি থেকে অবজেক্টগুলি নির্মিত হয়েছিল। এটি "অন্তর্নিহিতের চেয়ে সুস্পষ্ট ভাল" - দর্শন অনুসারে।

বিপরীতে, জাভা অবজেক্টগুলিতে সত্যই যাদু এবং ভাষাতে সরল উপাদানগুলিতে হ্রাস করা যায় না। জাভাতে (কমপক্ষে জাভা 8 পর্যন্ত) কোনও ফাংশন সর্বদা কোনও জিনিসের মালিকানাধীন একটি পদ্ধতি এবং ভাষার স্থিত প্রকৃতির কারণে এই মালিকানা পরিবর্তন করা যায় না। সুতরাং যা thisবোঝায় সে সম্পর্কে কোনও অস্পষ্টতা নেই , সুতরাং এটি সুস্পষ্টভাবে সংজ্ঞায়িত করা বোধগম্য হয়।

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

সুস্পষ্ট- selfপরিমিতিটির কিছু অন্যান্য সুবিধা :

  • সাজসজ্জা শুধুমাত্র ফাংশন যা অন্যান্য ফাংশন মোড়ানো। যেহেতু পদ্ধতিগুলি কেবল ফাংশন, তাই সাজসজ্জাগুলি পদ্ধতিগুলির মতো ঠিক সূক্ষ্মভাবে কাজ করে। যদি কোনও ধরণের অন্তর্নিহিত স্ব থাকে তবে সাজসজ্জা পদ্ধতিতে স্বচ্ছভাবে কাজ করবে না।

  • শ্রেণিবদ্ধ এবং স্থির পদ্ধতিগুলি উদাহরণ প্যারামিটার নেয় না। শ্রেণিবদ্ধরা প্রথম যুক্তি হিসাবে সাধারণত একটি শ্রেণি নেয় (সাধারণত বলা হয় cls)। সুস্পষ্ট selfবা clsপরামিতিগুলি এটিকে আরও স্পষ্ট করে তোলে যা চলছে এবং পদ্ধতিতে আপনার কী অ্যাক্সেস রয়েছে।

2) কেন উদাহরণস্বরূপ ভেরিয়েবলগুলি সর্বদা "এর সাথে যোগ্য হতে হবে self.?

জাভাতে, আপনাকে " this." দিয়ে সদস্য ভেরিয়েবলগুলির উপসর্গের দরকার নেই , তবে পাইথন " self." এ সর্বদা প্রয়োজন। কারণটি হ'ল পাইথনের ভেরিয়েবলগুলি ঘোষণার জন্য সুস্পষ্ট সিনট্যাক্স নেই, সুতরাং কোনও x = 7নতুন স্থানীয় ভেরিয়েবল ঘোষণা করার বা সদস্য ভেরিয়েবলকে নির্ধারিত করার কথা বলার উপায় নেই । নির্দিষ্টকরণ self.এই অস্পষ্টতাকে সমাধান করে।


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

@ জানহুদেক: ভাল, কথা আমি এটি উত্তরে যুক্ত করেছি।
জ্যাকবিবি

6

একটি সহজ সরল কারণ আছে যে আফাইককে ক্রস-সাইট সদৃশটিতে সত্যিই স্পর্শ করা যায়নি বা এখানেও নয়: পাইথন প্রক্রিয়াজাতীয় ভাষা হিসাবে শুরু হয়েছিল। এটি এবিসি ভিত্তিক ছিল, এটি একটি প্রক্রিয়াগত ভাষাও।

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


আমি বিশ্বাস করি পাইথন ওওকে সমর্থন করেছিল এবং প্রথম প্রকাশিত সংস্করণ থেকে ক্লাস এবং উত্তরাধিকার ছিল। কমপক্ষে এটিই উইকিপিডিয়া আমাকে বলে। তবে ভ্যান রসসমস প্রক্রিয়াটি প্রাথমিকভাবে ভাষাটি ডিজাইনিং করার ক্ষেত্রে আপনার বর্ণনা অনুসারে হতে পারে।
জ্যাকবিবি


লিঙ্কটির জন্য ধন্যবাদ, এটি সত্যিই আকর্ষণীয় পড়া।
জ্যাকবিবি

2

উপরোক্ত উত্তরের উপর ভিত্তি করে এবং এই বিষয়টিতে গুইডোর নিজস্ব র‌্যাম্বলিং পড়ার ভিত্তিতে আমার সিদ্ধান্তগুলি এখানে রয়েছে :

বড় ধারণা

পাইথনের গুরুত্বপূর্ণ ক্রিয়াকলাপগুলি হ'ল (বা আমাদের কেবলমাত্র একটিটি বলা উচিত) বাস্তবে আমরা ফাংশনগুলি ব্যবহার করে ওওপি অনুকরণকারী are

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


1
যখন আপনার উত্তরটি একটি উচ্চ মানের উত্তর হয় তখন স্ব-উত্তরযুক্ত প্রশ্নগুলি উত্সাহিত হয়। আমি যখন আপনার উত্তরটি এখানে অন্য উত্তরের সাথে তুলনা করি তখন ভাবছিলাম কেন আপনার এটিকে যুক্ত করার দরকার পড়েছে। অন্যান্য উত্তরগুলি আরও গভীরতায় যায় এবং আপনার উত্তর যা দেয় তার চেয়ে আরও বিশদ যুক্ত করে।

1
@ গ্লেনএইচ 7 উত্তরটি কেবলমাত্র আমার রেফারেন্সের জন্য ছিল কারণ প্রতিবার আমি প্রত্যেকের উত্তরটি বার বার পড়তে এবং পড়তে পারি না। গুণমান সম্পর্কে, কোনও বিট তথ্য বিভ্রান্তিকর কিনা তা আমাকে বলুন। যাইহোক আমি কোনও উত্তর গ্রহণ করতে সাধারণত ২-৩ দিন অপেক্ষা করি।
বিবেক

ডাউন ভোটিং সস্তা মুদ্রায় পরিণত হচ্ছে এবং এখানকার প্রত্যেকে এর অর্থ না জেনে উভয় হাতেই ব্যয় করছে। আপনি কি বুঝতে পেরেছেন যে এখানে যদি কেউ এই উত্তরটি নীচে দেখেন তবে ভোটটি ভুল বলে ধরে নিবে!
বিবেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.