পাইথন ক্লাসে পদ্ধতিগুলি অর্ডার করার একটি ভাল উপায় কী?


89

আমি পাইথন ক্লাসে পদ্ধতিগুলি অর্ডার করতে চাই তবে সঠিক অর্ডার কী তা আমি জানি না।

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

পাইথনের সেরা অনুশীলন কী?


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

4
এমনকি পিইপি 8 সর্বদা পাথরে সেট করা থাকে না।
Ignacio Vazquez-Abram

4
আমি সাধারণত এটি কার্যকারিতা (গোষ্ঠী, সেট ইত্যাদি)
গোষ্ঠী অনুসারে করি

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

উত্তর:


67

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

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

  • বৈশিষ্ট্য, যাদু পদ্ধতি , সর্বজনীন পদ্ধতি: এই তিনটির মধ্যে সেরা ক্রমটি নির্ধারণ করা শক্ত, যা শ্রেণীর ইন্টারফেসের সমস্ত অংশ। যেমন @ ইথানফর্মান বলেছেন, পুরো প্রকল্পের জন্য একটি সিস্টেমের সাথে থাকা সবচেয়ে গুরুত্বপূর্ণ। সাধারণত, লোকেরা __init__()ক্লাসে সেরা প্রথম ফাংশন আশা করে তাই আমি ঠিক নীচে অন্যান্য যাদু পদ্ধতিগুলি অনুসরণ করি।

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

  • শ্রেণি পদ্ধতি এবং স্থিতিশীল পদ্ধতি: সাধারণত, এটি উপরে বর্ণিত পঠন আদেশের দ্বারা বোঝানো হয় । সাধারণ পদ্ধতিগুলি সমস্ত পদ্ধতিগুলিকে বার কল করতে পারে এবং এভাবে প্রথমে আসে। ক্লাস পদ্ধতিগুলি কেবল শ্রেণির পদ্ধতি এবং স্থিতিশীল পদ্ধতিগুলিতে কল করতে পারে এবং পরবর্তী আসতে পারে। স্থিতিশীল পদ্ধতি ক্লাসের অন্যান্য পদ্ধতিগুলিকে কল করতে পারে এবং শেষ হয় না।

আশাকরি এটা সাহায্য করবে. এই বিধিগুলির বেশিরভাগ উপায় দ্বারা পাইথন-নির্দিষ্ট নয়। আমি এমন একটি ভাষা সম্পর্কে সচেতন নই যা পদ্ধতি ক্রম প্রয়োগ করে তবে যদি তা হয় তবে তা বেশ আকর্ষণীয় হবে এবং মন্তব্য করুন।


4
সাধারণত একটি ভাষা আদেশ প্রয়োগ করে না। তবে কিছু ভাষার প্রচলিত সম্মেলন রয়েছে। যেমন সি # স্টাইলকপের একটি কঠোর অর্ডার করার নিয়ম রয়েছে। জাভা দেখুন stackoverflow.com/questions/4668218 , ইত্যাদি
xmedeko

4
শ্রেণীর পদ্ধতি: এগুলি প্রায়শই নির্মাণকারী হিসাবে ব্যবহৃত হয় এবং তারপরে তারা সাধারণত __init__স্পষ্টভাবে (সংমিশ্রণে __new__) বা স্পষ্টভাবে কল করে ( ডিফল্ট কনস্ট্রাক্টারের মাধ্যমে), যাতে তাদের সাথে একসাথে রাখার কারণ হতে পারে __init__। (যদিও আমি তাদের আগে কখনও দেখিনি __init__।)
ওলেঞ্জ

15

সঠিক অর্ডার নেই। একটি সিস্টেম বাছুন এবং এটি দিয়ে স্টিক করুন। আমি যেটি ব্যবহার করি তা হ'ল:

class SomeClass(object):
    def __magic_methods__(self):
        "magic methods first, usually in alphabetical order"
    def _private_method(self):
        "worker methods next, also in alpha order"
    def a_method(self):
        "then normal methods, also in alpha order"

4
স্ট্যাটিকমেডোডস, ক্লাস ভেরিয়েবল এবং @ প্রোপার্টি সজ্জিত পদ্ধতির জন্য আপনার পছন্দ কী?
জন মে

@ জনমী: ক্লাস ভেরিয়েবল আমি অন্য কিছুর আগে রেখেছি; আমার ভাঁজ পদ্ধতি চামড়া @staticmethod, @classmethod, @propertyএবং অন্য কোন @decoratorলাইন তাই আমি নির্ধারণ করতে যেখানে এটি (ব্যতিক্রম যে বৈশিষ্ট্য মধ্যে যেতে ঝোঁক সঙ্গে যায় পদ্ধতির ধরনের ব্যবহার _private_methodsএবং normal_methods)।
ইথান ফুরম্যান

সুতরাং যদি আদেশটি মূলত খুব বেসরকারী "যাদু" পদ্ধতি থেকে প্রাইভেট থেকে সাধারণ পদ্ধতিতে চলে যায়, তার মানে কি @classmethodএস (এস @classmethod def a_class_method(cls)) এর পরে @staticmethod(এস ) এর পরে আসবে @staticmethod def a_static_method()? কমপক্ষে এটি নীতিটি যেমনটি আমি বুঝতে পেরেছি ... (আমার আইডিই কোনও ভাঁজ ছাড়াই কারণ আমি পছন্দ করি না)
কাও

2

আমি ইথানের সাথে অনুরূপ কিছু করি যা আমি জ্যাঙ্গোর উত্সে দেখেছি, যেখানে মূল পার্থক্যটি বড় "############" অঞ্চলগুলি সীমান্তে রাখতে মন্তব্যগুলি ব্লক করুন। উদাহরণ স্বরূপ,

class SomeClass(object):
    #################
    # Magic Methods #
    #################
    def __magic_methods__(self):
        "magic methods first"

    ##################
    # Public Methods #
    ##################
    def a_method(self):
        "then normal methods, in order of importance"

    ###################
    # Private Methods #
    ###################
    def _private_method(self):
        "then worker methods, grouped by importance or related function"

স্পষ্টতই এটি ছোট শ্রেণির জন্য কম কার্যকর।


19
তবে আমি দেখতে পাচ্ছি যে তারা যাদু, সরকারী বা ব্যক্তিগত। আমি এই জাতীয় মন্তব্যগুলির ব্লকগুলিকে সক্রিয়ভাবে অপছন্দ করি; আমি যদি সেগুলির একটি তালিকা দেখতে চাই তবে আমি ভাঁজ করা কোডটি দেখতে পারি। কার্যকারিতা-সম্পর্কিত পদ্ধতিগুলির একটি নির্দিষ্ট ব্লকের উপরে একটি মন্তব্য করা আমি যা করি তা হ'ল, তবে এই ধরণের মন্তব্যের জন্য - এই পদ্ধতির নামগুলি আমাকে বলে।
ক্রিস মরগান

আবার আমি কেবল এটি বৃহত্তর শ্রেণীর জন্য করি। আমি আধা-বেসরকারী ( ) এবং নাম-ম্যাঙ্গেলড (_ ) পদ্ধতির সাহায্যে যাদু পদ্ধতিগুলিকে বিভ্রান্ত করা সহজ বলে মনে করি ।
ম্যাট লুঙ্গো

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

4
@ ম্যাটেন উলহাক দয়া করে সম্পাদনা স্ক্রিনে প্রদর্শিত দ্বিতীয় এবং পঞ্চম গাইডলাইনগুলি দেখুন: "এটিকে পরিবর্তন না করে অর্থ ব্যাখ্যা করুন" এবং " সর্বদা মূল লেখককে সম্মান করুন"। (দ্রষ্টব্য যে এগুলি সম্পাদকের নিজস্ব মতামতের কোনও সম্মান ছাড়াই নিঃশর্ত প্রয়োগ করা হবে)) এই উত্তরের পুরো এবং একমাত্র বক্তব্যটি ছিল সেই কুৎসিত মন্তব্য ব্লকগুলি প্রদর্শন করা; তাদের ছাড়া এটি ইথানের উত্তর হিসাবে ঠিক একই জিনিসটি বলে এবং এটি এখানে থাকার কোনও মানে নেই। আপনি এমনকি স্বীকৃতিও দিয়েছিলেন যে ব্লকগুলি সেখানে " উদ্দেশ্যপ্রণোদিত " ছিল - এটি জানার পরে আপনি কেন সেগুলি সরিয়ে ফেলবেন?
আরে

4
@ এমআই রাইট আমি এটিকে প্রশ্নের ক্ষেত্রের বাইরে ভেবেছি। আপনি দেখতে পাচ্ছেন, Rev2 তে এখনও এমন উপাদান রয়েছে যা ইথানের থেকে পৃথকভাবে অর্ডারের (এবং অধীনস্থ!) প্রশ্নের উত্তর দেয়। তবুও, ঘূর্ণিত ফিরে।
মতিন উলহাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.