মডিউলগুলির জন্য পাইথন নামকরণের সম্মেলন


102

আমার একটি মডিউল রয়েছে যার উদ্দেশ্য "নিব" নামে একটি শ্রেণি সংজ্ঞায়িত করা। (এবং কয়েকটি সম্পর্কিত ক্লাসেও)) মডিউলটিকে আমি কীভাবে কল করব? "নিব"? "Nibmodule"? আর কিছু?

উত্তর:


110

শুধু নিব। নামধারী কনভেনশন এবং অন্যান্য শৈলীর পরামর্শের জন্য আরও একটি রাজধানী এন সহ ক্লাবটির নাম নিন, ক্লাসটির নাম দিন , পাইথন শৈলীর গাইড পিইপি 8 দেখুন ।


2
বেশিরভাগ পাইথন প্রকল্পগুলি কি এই সম্মেলনটি অনুসরণ করে? কারণ আমি লক্ষ্য করেছি যে অন্তর্নির্মিত ক্লাসগুলি ছোট হাতের মধ্যে রয়েছে, যেমন তালিকা, স্ট্রিং ইত্যাদি
রাম রাছুম

4
আপনার পর্যবেক্ষণটি অন্তর্নির্মিত প্রকারগুলি সঠিক। যদিও এগুলি স্থিরভাবে ব্যতিক্রম। সর্বাধিক অন্যান্য মান গ্রন্থাগার সংজ্ঞায়িত শ্রেণীর দ্বারা মূলধন।
স্টিফান202

2
আমি ভেবেছিলাম এটি সঠিক সম্মেলন, তবে এটির সাথে একটি অন্তর্নিহিত সমস্যা আছে, কমপক্ষে এটি আমার কাছে মনে হয়। বলুন আমার একটি ক্লাস আছে Client, এবং বোধগম্য আমি প্রায়শই এর কল করতে চাই যা আমি কল করতে চাই client। কিন্তু আপনার কনভেনশন অনুযায়ী, মডিউল নাম হবে client, এবং তাই আমি সবসময় আমার দৃষ্টান্ত কিছু অস্বাভাবিক নাম আছে চাই client_instance। আপনি এই সমস্যাটি সম্পর্কে কী ভাবেন?
রে

3
@ রে কিন্তু বলুন যে কনভেনশনটি মডিউলটির নামকরণ করবে Client, তবে এটি শ্রেণীর নামের সাথে সংঘর্ষ হবে Client। আছে যেহেতু মাত্র 3 সম্ভব নামকরণ রূপগুলো ( client, Clientবা CLIENT) সবসময় দৃষ্টান্ত, ক্লাস, মডিউল বা ধ্রুবক দুজনের মধ্যে সংঘর্ষ হবেন। আমি বিশ্বাস করি আপনি ক্লাসের তুলনায় আপনার মডিউলটির উদাহরণ বা ধ্রুবক হিসাবে কম সময় ব্যবহার করেন এবং তাই অন্য সম্ভাবনার আরও ভাল নামকরণের কনভেনশন। আপনি সাধারণত ভেরিয়েবলের পরিবর্তে ক্লাস এবং ধ্রুবক আমদানি করেন তাই এটি মডিউলগুলি থেকে আরও পঠনযোগ্য পড়বে।
টেড ক্লেইন বার্গম্যান

2
বিল্টিনগুলি লোয়ারकेস হওয়ার কারণটি বোঝাই যে সেগুলি পাইথনের চেয়ে সিতে প্রয়োগ করা হয়েছিল।
হার

41

আমি এটিকে nib.py বলব এবং আমি ক্লাসের নাম নিবও করতাম।

একটি বৃহত্তর অজগর প্রকল্পে আমি কাজ করছি, আমাদের মূলত একটি গুরুত্বপূর্ণ শ্রেণি সংজ্ঞায়িত করার জন্য প্রচুর মডিউল রয়েছে। শ্রেণিগুলির নাম একটি মূল অক্ষর দিয়ে শুরু হয়। মডিউলগুলি ছোট হাতের ক্লাসের মতো নামকরণ করা হয়। এটি নিম্নলিখিতগুলির মতো আমদানি করে:

from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs

এটি কিছুটা জাভা উপায় অনুকরণ করার মতো। প্রতি ফাইল প্রতি ক্লাস। তবে যুক্ত নমনীয়তার সাথে, আপনি যদি সবসময় কোনও একক ফাইলের সাথে অন্য শ্রেণি যুক্ত করতে পারেন তা যদি তা বোঝা যায়।


27

আমি জানি আমার সমাধানটি পাইথোনিক দৃষ্টিকোণ থেকে খুব জনপ্রিয় নয় তবে আমি ক্লাসের নামযুক্ত মডিউলটির সাথে একটি মডিউল-> এক শ্রেণির জাভা পদ্ধতির ব্যবহার করতে পছন্দ করি। পাইথন স্টাইলের পিছনে কারণটি আমি বুঝতে পারি, তবে অনেক ক্লাস যুক্ত একটি খুব বড় ফাইল থাকা আমার খুব পছন্দ নয়। ভাঁজ হওয়া সত্ত্বেও ব্রাউজ করা আমার পক্ষে কঠিন difficult

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

সংক্ষেপে, আপনি যদি অজগর দর্শন পছন্দ করেন তবে অন্যান্য পোস্টের পরামর্শের জন্য যান। আপনি যদি এর পরিবর্তে জাভা-জাতীয় দর্শন পছন্দ করেন তবে নিব ক্লাসযুক্ত একটি Nib.py তৈরি করুন।


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

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

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

22

নিব ঠিক আছে। সন্দেহ হলে পাইথন স্টাইল গাইডটি দেখুন।

পিইপি 8 থেকে :

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

যেহেতু মডিউল নাম ফাইল করার জন্য ম্যাপ করা থাকে এবং কিছু ফাইল সিস্টেমগুলি সংবেদনশীল এবং দীর্ঘ নামগুলি কাটা হয়, তাই মডিউল নামগুলি মোটামুটি সংক্ষিপ্ত হিসাবে বেছে নেওয়া গুরুত্বপূর্ণ - এটি ইউনিক্সে সমস্যা হবে না তবে এটি একটি হতে পারে সমস্যাটি যখন পুরানো ম্যাক বা উইন্ডোজ সংস্করণগুলি বা ডসগুলিতে স্থানান্তরিত হয়।

সি বা সি ++ তে লিখিত একটি এক্সটেনশন মডিউলটির সাথে একটি পাইথন মডিউল থাকে যা উচ্চতর স্তর (যেমন আরও বেশি বস্তু কেন্দ্রিক) ইন্টারফেস সরবরাহ করে, সি / সি ++ মডিউলটির একটি শীর্ষস্থানীয় আন্ডারস্কোর থাকে (যেমন _সকেট)।


1
আহ্ ... এটি আমাকে পেটে আঘাত করে। আমি সম্পূর্ণ আলাদা কিছু (পেন্টাল অজগর রেফারেন্স উদ্দেশ্যে) জন্য প্যাকেজ / মডিউলগুলিতে আন্ডারস্কোর উপসর্গ ব্যবহার করছি।
স্টিফানো বোরিনি

0

থেকে PEP-8: প্যাকেজ এবং মডিউল নাম :

মডিউলগুলির সংক্ষিপ্ত, সমস্ত-ছোট নাম থাকা উচিত। অধ্যয়নগুলি মডিউলটির নামে ব্যবহারযোগ্য যদি এটি পঠনযোগ্যতা উন্নত করে।

পাইথন প্যাকেজগুলিরও ছোট, সমস্ত ছোট ছোট নাম থাকা উচিত, যদিও আন্ডারস্কোর ব্যবহার নিরুত্সাহিত করা হয়।

সি বা সি ++ তে লিখিত একটি এক্সটেনশন মডিউলটির সাথে একটি পাইথন মডিউল থাকে যা উচ্চতর স্তর (যেমন আরও বেশি বস্তু কেন্দ্রিক) ইন্টারফেস সরবরাহ করে, সি / সি ++ মডিউলটির একটি শীর্ষস্থানীয় আন্ডারস্কোর থাকে (যেমন _সকেট)।


-3

পাইথনে foo মডিউল জাভাতে একটি ফু ক্লাস ফাইলের সমতুল্য হবে

অথবা

পাইথনে foobar মডিউলটি জাভাতে একটি FooBar বর্গ ফাইলের সমতুল্য হবে

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