পাইথোনিককে একই ফাইলে একাধিক ক্লাস সংজ্ঞায়িত করা হিসাবে বিবেচনা করা হয়?


31

অজগরটির সাথে প্রথমবারের মতো কাজ করার সময়, আমি খুঁজে পেয়েছি যে আমি একই ফাইলটিতে একাধিক ক্লাস লিখেছি, যা জাভা যেমন অন্যান্য ভাষার বিরোধী, যা প্রতি ক্লাসে একটি ফাইল ব্যবহার করে।

সাধারণত, এই ক্লাসগুলি 1 টি বিমূর্ত বেস বর্গ দ্বারা গঠিত হয়, 1-2 কংক্রিট বাস্তবায়নের সাথে যারা ব্যবহারের ব্যবহার কিছুটা আলাদা হয়। আমি এই জাতীয় একটি ফাইল নীচে পোস্ট করেছি:

class Logger(object):

    def __init__(self, path, fileName):
        self.logFile = open(path + '/' + filename, 'w+')
        self.logFile.seek(0, 2)

    def log(self, stringtoLog):
        self.logFile.write(stringToLog)

    def __del__(self):
        self.logFile.close()

class TestLogger(Logger):   

    def __init__(self, serialNumber):
        Logger.__init__('/tests/ModuleName', serialNumber):

    def readStatusLine(self):
        self.logFile.seek(0,0)
        statusLine = self.logFile.readLine()
        self.logFile.seek(0,2)
        return StatusLine

    def modifyStatusLine(self, newStatusLine):
        self.logFile.seek(0,0)
        self.logFile.write(newStatusLine)
        self.logFile.seek(0,2)

class GenericLogger(Logger):

    def __init__(self, fileName):
        Logger.__init__('/tests/GPIO', fileName):

    def logGPIOError(self, errorCode):
        self.logFile.write(str(errorCode))

উপরে যেমন দেখা যাচ্ছে, তার নিচে বেশ কয়েকটি বাস্তবায়ন পার্থক্য সহ আমার একটি লগার বেস ক্লাস রয়েছে।

প্রশ্ন: এই পাইথন জন্য আদর্শ, বা কোনো ভাষার জন্য আছে কি? যদি এই বাস্তবায়নটি ব্যবহার করে কোন সমস্যা দেখা দিতে পারে?

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


3
প্রতি ফাইল প্রতি এক শ্রেণিতে সীমাবদ্ধ করা কোনও সি ++ জিনিস নয়। জাভা হ'ল একমাত্র ভাষা যেখানে আমি এটিকে কিছু এড়িয়ে চলা বিবেচনা করি of সি ++ তে, একটি একক .h / .cpp ফাইলের জন্য একটি প্রাথমিক শ্রেণি এবং প্রচুর সহায়ক শ্রেণি রাখা খুব সাধারণ, যা প্রাথমিক শ্রেণীর কাছে ব্যক্তিগত বা নাও হতে পারে।
রোবট

আপনি সঠিক হিসাবে @ স্টিভেন বার্নাপ আমি উদাহরণ হিসাবে সি ++ অপসারণ করেছি।
Ampt

1
অটো-লোডিংয়ের সুবিধার্থে এটি পিএইচপিতেও সম্পন্ন হয়েছে। অন্যদিকে পিএইচপিতে আপনি স্পষ্টভাবে নেমস্পেস ঘোষণা করতে পারেন।
বোডো

উত্তর:


24

এটা ভাল. রেফারেন্সের জন্য এটি সি ++ তেও ঠিক আছে।

শক্তভাবে দম্পতিযুক্ত জিনিসগুলি এক সাথে রাখা বুদ্ধিমান অনুশীলন is অনুপযুক্ত মিলন এড়ানোও ভাল অনুশীলন। সঠিক ব্যালেন্সকে আঘাত করা কঠোর নিয়মের বিষয় নয়, তবে, বিভিন্ন উদ্বেগের মধ্যে ভারসাম্য বজায় রাখা।

থাম্বের কিছু নিয়ম:

  1. আয়তন

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

  2. উদ্বেগ বিচ্ছেদ

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

    সুতরাং, কখনও কখনও সাব-ক্লাসগুলির তাদের নির্ভরতার সাথে সংযোগ স্থাপনের বিষয়টি ইন্টারফেসের সাথে সংযুক্ত হওয়ার চেয়ে বেশি বিবেচনা করা যুক্তিসঙ্গত হতে পারে (বা বিপরীতভাবে, কোনও ইন্টারফেস বাস্তবায়নের উদ্বেগ সেই বাস্তবায়নের অভ্যন্তরীণ উদ্বেগগুলির চেয়ে দুর্বল)।

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

  3. encapsulation

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

    আমার মনে হয় এটি কেবল দুর্বল স্টাইল, তবে আপনি যদি সত্যিই অভ্যাসটি না ভাঙতে পারেন তবে আপনি মডিউলটিকে বিভক্ত করে আরও ভাল শৃঙ্খলা প্রয়োগ করতে পারেন।


2
আপনার উত্তরটি আরও শক্তিশালী হবে যদি এটি বাহ্যিক রেফারেন্সগুলি উদ্ধৃত করে তবে কোনও ফাইলে ক্লাস সংমিশ্রণের স্বাভাবিকতা প্রদর্শিত হয়, বা এটি কেন ঠিক আছে তা নির্দেশ করে আরও ব্যাখ্যা সরবরাহ করে।

1
আমি প্রশ্নটি সম্পাদনা করে দেখিয়েছি যে এটি কেবল আমার অর্থের একটি উদাহরণ এবং এটি প্রশ্নের প্রকৃতির প্রতিনিধিত্ব করে না। প্রয়োজনে কেবল তাদের আমদানি করার চেয়ে কেন তাদের একই ফাইলে রাখা ভাল?

প্রচুর ক্ষুদ্র ফাইল থাকা যেমন কয়েকটি বিশাল ফাইল রয়েছে তেমনি পরিচালনা করাও শক্ত। পাইথন মোটামুটি সংক্ষিপ্ত ভাষা। আপনার উদাহরণ এটি দেখায়। এই তিনটি ক্লাস সরাসরি সম্পর্কিত এবং সম্ভবত কোনও একক সম্পাদক উইন্ডোতে স্ক্রল না করে ফিট fit
রোবট

1
@ গ্লেনএইচ 7 - আমি রেফারেন্স সম্পর্কে নিশ্চিত নই, যেহেতু তারা কেবল আমার কাছ থেকে সরাসরি দাবি দাবি থেকে সরে গেছে, আমার কাছে দাবি করা হয়েছে যে আমার নির্বাচনের পক্ষপাত বৈধ is আমি পরিবর্তে ব্যাখ্যা উপর ফোকাস করার চেষ্টা করেছি।
অকেজো

7

পাইথোনিক কী তা জানতে আমার স্বাভাবিক রেফারেন্স ডকুমেন্টস।

সহজ জটিল চেয়ে ভাল।

ফ্ল্যাট বাসা থেকে ভাল।

পাইথনের জেন থেকে

প্রায় ব্যতিক্রম ছাড়াই, শ্রেণীর নামগুলি ক্যাপওয়ার্ডস কনভেনশন ব্যবহার করে।

প্যাকেজ এবং মডিউল নাম মডিউলগুলির সংক্ষিপ্ত, সমস্ত-ছোট নাম থাকা উচিত। [...] মডিউলের নাম ফাইল করার জন্য ম্যাপ করা হয়

পিইপি 8 থেকে

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


7
আপনি কি প্রশ্নের সাথে সম্পর্কিত অংশগুলিতে এটিকে হ্রাস করতে পারবেন? আমি এই উভয় একাধিক সময় পড়েছি কিন্তু বিশেষ করে আমার বর্তমান প্রশ্নের সাথে কোন অংশগুলি সম্পর্কিত তা খুঁজে বের করতে আমার খুব কষ্ট হচ্ছে।

1
আসলে, আমি আমার উত্তর সম্পাদনা করেছি।
সিভাইনড

1

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


0

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


-1

সংক্ষেপে - হ্যাঁ হ্যাঁ

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


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