পাইথনে ক্লাসের জন্য ফাইলপথটি কীভাবে পাব?


99

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

আমি এটি করার কারণটি হ'ল কারণ আমি সাধারণত একই ফোল্ডারে একত্রে থাকা ফাইলগুলি বন্ধ করে দেওয়া a আমি এমন একটি শ্রেণি তৈরি করতে চাই যা এইচটিএমএল হিসাবে নিজেকে রেন্ডার করতে একটি জ্যাঙ্গো টেম্পলেট ব্যবহার করে। ক্লাসটি সংজ্ঞায়িত করা ফাইলের উপর ভিত্তি করে বেস প্রয়োগের টেমপ্লেটের জন্য ফাইলের নাম নির্ধারণ করা উচিত।

বলুন যে আমি "বেস / আর্টিফিকেস.পি" ফাইলটিতে একটি ক্লাস লোকেশনআর্টিফ্যাক্ট রেখেছি, তারপরে আমি ডিফল্ট আচরণটি টেমপ্লেটের নামটি "বেস / লোকেশনআর্টিফ্যাক্ট html" হওয়া চাই।



4
এইগুলি ধরে নিয়েছে যে আপনি যে মডিউলটির জন্য ফাইলটি সন্ধান করছেন তা জানেন, আমি ক্লাসের বাইরে বাস্তবায়নের সাথে কাজ করার সাথে সাথে আমার কেবল মডিউল স্ট্রিং থাকবে।
Staale

উত্তর:


136

আপনি পরিদর্শন মডিউলটি এর মতো ব্যবহার করতে পারেন :

import inspect
inspect.getfile(C.__class__)

4
আমি আলাদা কী করছি তা নিশ্চিত নয় তবে এর পরিবর্তে getfileআমাকে ব্যবহার করতে হবে: inspect.getmodule(C.__class__)
এজেপি

4
দ্রষ্টব্য: ব্যবহারকারীর দ্বারা তৈরি ক্লাসে কাজ করে না
ড্যানিয়েল ব্রাউন

8
এটি সম্ভবত হওয়া উচিত inspect.getfile(C)। যদি Cএকটি শ্রেণি হয়, তবে C.__class__উল্লেখ করে object, যা একটি ব্যতিক্রম বাড়াবে TypeError: <module 'builtins' (built-in)> is a built-in class। আমি মনে করি যে আপনি কেবলমাত্র একটি উদাহরণ cব্যবহার করতে চান inspect.getfile(c.__class__)
CHESirekow

4
এটি এমন কোনও শ্রেণীর পক্ষে হয়নি যা একটি বিমূর্ত বেস শ্রেণি প্রসারিত করে ( metaclass=abc.ABCMeta), কারণ এটি /usr/local/lib/python3.7/abc.pyউপযুক্ত ফাইলের পরিবর্তে ফিরে আসে । @ জারেটহার্ডি (নীচে) এর সমাধান আরও ভাল কাজ করেছে।
মার্চিয়ান 111

inspect.getfile (স্ব .__ শ্রেণি__) আমার জন্য কাজ করেছে
diman82

37

চেষ্টা করুন:

import sys, os
os.path.abspath(sys.modules[LocationArtifact.__module__].__file__)

4
C- এর একটি দৃষ্টান্ত (যেমন ওপি দ্বারা পছন্দসই) থেকে পথ পেতে, প্রতিস্থাপন LocationArtifactসঙ্গে obj.__class__যেখানে obj LocationArtifact একজন উদাহরণ।
মার্চিয়ান 111

6

এটি জ্যাঙ্গোর পক্ষে ভুল উপায় এবং সত্যই জিনিস জোর করে।

সাধারণ জ্যাঙ্গো অ্যাপের প্যাটার্নটি হ'ল:

  • / প্রকল্প
    • /অ্যাপ্লিকেশন নাম
      • মডেল.পি
      • ভিউ.পি
      • / টেম্পলেট
        • index.html
        • ইত্যাদি

4
+1: জ্যাঙ্গো প্রাকৃতিকভাবে যা করে তা করুন এবং জীবন এত সহজ।
এস। লট

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