Skip to content

Instantly share code, notes, and snippets.

@sugarflower
Last active July 3, 2019 08:02
Show Gist options
  • Save sugarflower/5a343ca06cc3ec49e76919f5c05148dd to your computer and use it in GitHub Desktop.
Save sugarflower/5a343ca06cc3ec49e76919f5c05148dd to your computer and use it in GitHub Desktop.

親モジュールを知る

どうにかならないかと書いてみた

import inspect

def getParent():
	#c = 0
	for i in inspect.stack():
		if i[3] == "<module>":
			#_parent = inspect.getmodule(inspect.stack()[c][0])
			_parent = inspect.getmodule(i[0])
		#c += 1
	return _parent

※余計な処理をコメントアウト、修正した

inspect.stack()の内容は

[FrameInfo(frame=<frame object at 0x76b197b0>, filename='<stdin>', lineno=1, function='<module>', code_context=None, index=None)]

このような感じになっている。いわゆるスタックトレースで、

  • 0 frame
  • 1 filename
  • 2 lineno
  • 3 function
  • 4 code_context
  • 5 index

といった具合に6つの項目があり、呼び出し元がモジュールであれば 3 function<module> となる。 ので、その行を見つけてinspect.getmoduleする。
呼び出しがネストされていれば当然スタックトレースの行は変わるもののREPLなどから利用していない限りはこれで行けるのではないかなぁ、 REPLの場合 1 filename<stdin>になるような気もするのでこれをパスしてやるのも手かもしれない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment