0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

呼び出し元メソッドをinspectを使わずに判別する

Last updated at Posted at 2020-03-02

同ディレクトリ上に3つのファイルがある。

test.py
import sys

class Aiueo(object):

    def common(self):
        print(1)
        print(2)
        print(3)

    def func_a(self):
        print(4)
        self.common()

    def func_b(self):
        print(5)
        self.common()
test_a.py
import test
test.Aiueo().func_a()
test_b.py
import test
test.Aiueo().func_b()

test_a.pyを実行すれば4123と打たれ、
test_b.pyを実行すれば5123と打たれる。
これが現在の仕様。


ところが後になって仕様変更があり、
4123、5123ではなく、4123、513と打つように変更する必要が出てきた。

ただし、チームの決めでinspectのimportはできない。
また、現実はこんな単純なprint文ではなく、
もっと複雑に組み込まれているので共通関数を崩すのも億劫。

まぁフラグ用の引数を渡してあげればいいだけの話なんだけど、
それ以外でもなんとかならないかちょっと調べてみた。

結論

sysはimport済みだったので、正体不明のアトリビュート(???)を使ってなんとかなった。

if 'func_a' in str(sys.modules):

まだまだ勉強が足りない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?