質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1301閲覧

【python3】呼び出し元ファイルのあるディレクトリ名が知りたい

shirai

総合スコア1290

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/02/09 02:46

文字ばかりですみません。

ツリー構造

A---B---d.py
C---E---F---i.py
G---j.py
H---k.py

・ディレクトリAにディレクトリBとディレクトリCがある

・ディレクトリBにd.pyがある

・ディレクトリCにディレクトリEがある

・ディレクトリEにディレクトリFとディレクトリGとディレクトリHがある

・ディレクトリFにi.pyがある

・ディレクトリGにj.pyがある

・ディレクトリHにk.pyがある

・i, j, kはそれぞれdを呼び出して用いる

状況

i, j, kはそれぞれ7, 8行程度の実行ファイルで、1字1句全く同じにしようとしています。
dのクラスのインスタンスを宣言し、同じインスタンスメソッドを利用させようとしています。

この時どこから呼び出されたかによって、
このインスタンスメソッドの挙動を変化させたいです。

i, j, kでインスタンスメソッドを呼び出す際に異なる引数を持たせても良いのですが、
これ以外にも多く存在する他の実行ファイルとの統一性を持たせたく、
引数以外の方法で判別させられないかを検討しています。

詳細

ある情報を日、週、月単位でスクレイピングし取得する
というインスタンスメソッドになります。

対象サイトの対象ページは月間データが全て載っているため
どれだけの量をスクレイピングで取得するかを変化させたいだけなので、
1つのインスタンスメソッドで行おうと思っています。

F, G, Hはそれぞれ"hogehoge_day", "hogehoge_week", "hogehoge_month"というディレクトリ名なので
ここを起点に場合分けをできればと考えました。

質問内容

dのインスタンスメソッド内でF, G, Hのディレクトリ名を取得する方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siruku6

2020/02/09 03:24 編集

ポリモーフィズムという考え方に従ってクラス設計をすれば、ディレクトリ名を取得しなくても似たような実装ができ、またその方が一般的であるように感じたのですが、いかがでしょう... https://www.sejuku.net/blog/90417 個人開発しかしないのであれば問題ないのですが、いずれは複数人で一つのシステムを開発することもあると考えると、メソッドの処理を呼び出し元のディレクトリ名で分けるという方法はなかなか周囲の理解を得られずに困るのではないかと思います。 ディレクトリ名を取得する方法もあるのかもしれませんが、参考まで... (ポリモーフィズムの考え方に沿って開発した場合、i,j,k側に多くの処理を書くことになってしまうと思うので、そこもshiraiさんの希望にはそぐわなさそうですね)
shirai

2020/02/09 05:48

ありがとうございます!拝見します!
hayataka2049

2020/02/09 23:29

> i, j, kはそれぞれ7, 8行程度の実行ファイルで、1字1句全く同じにしようとしています。 これに違和感を持つべき……
guest

回答1

0

ベストアンサー

望む回答ではないですが・・・
引数で渡しましょうよ。ディレクトリ構成が違っても再利用できるように。
デフォルト引数で渡してもいいですし、それぞれ用のメソッドを用意してもいいと思います。

siruku6さんがコメントされていますが、メソッドの中で処理を振り分けるのはオブジェクト指向的とは言えません。ポリモーフィズムしましょう。
処理を渡して、欲しい情報はコールバックしてもらうといいです。
あるいは、処理できるデータ型に変換(アダプト)してからメソッドを呼び出すのもいいです。(Adapterパターン)

投稿2020/02/09 03:25

編集2020/02/09 03:59
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shirai

2020/02/09 05:47

うーんその方がいいですか。。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問