Subscribed unsubscribe Subscribe Subscribe

検討 多対一の関係の一側のオブジェクトに多の要素を持たせることについて

例えば、次のようなメソッド one_method を呼び出すとします。
obj_a.obj_b.obj_c.one_method()

このとき メソッド one_method を定義する中で
呼び出し元の obj_a, obj_b を取得する方法があれば
ご教示いただけないでしょうか?
class C():
def one_method(self):
# ここで obj_a, obj_b を取得する方法はありますか?

Python, 呼び出し元のオブジェクトの取得方法 例えば、次のよう… - 人力検索はてな

 
大人しく引数として与える①の方法が望ましそう。
理由としてはクライアント側からの動作がわかりづらくなるから。

ClassA多 対 一ClassB, ClassB多 対 一ClassC で無理やり
一側に多の要素を暫定的に持たせるのは良くない...。
 

検討① 引数として与える

obj_a.obj_b.obj_c.one_method(obj_a, obj_b)

 

検討② 値を設定するときに与える。

#
# 質問自体は__setattr__あたりを使って
# obj_aにobj_bを持たせた時点で
# obj_bにobj_aを持たせるとかになると思います。
#
class A():
 def get_obj_b(self):
  self.obj_b.obj_a = self.obj_a
  return self.obj_b

class B():
 def get_obj_c(self):
  self.obj_c.obj_b = self.obj_b
  return self.obj_c

class C():
 def one_method(self):
  print(self.obj_b)
  print(self.obj_b.obj_a)

回答で指摘されて気づきました。なんでこんな不自然なことをしようとしてたんだろう。

Remove all ads