私はこれらの線に沿って何かやろうとしている:このコードは、このエラーが発生します予想通りPythonの設計:OOP
class A:
def __init__(self, x=None, y=None):
self.x = x
self.y = y
class B(A):
def do_something_in_Bs_context(self):
print "In B"
class C(A):
def do_something_in_Cs_context(self):
print "In C"
a = A(1,2)
b = B.do_something_in_Bs_context(a)
c = C.do_something_in_Cs_context(a)
を:
TypeError: unbound method do_something_in_Bs_context() must be called with B instance as first argument (got A instance instead)
この設計の根本的な理由は、Aということですデータのコンテナ(テーブルなど)であり、BとCはAの操作セットです.BとCの両方が同じデータで動作しますが、概念的には同じデータに対して実行できる別個の操作セットです。私はAの中のBとCのすべての操作を練習することができましたが、私は概念の分離を作りたいと思います。 (例としてテーブル上で、私は微積分または三角法と言うようにグループ化することができる異なる演算のセットを実行することができますので、A:テーブル、B:微積分、C:三角法)
これは、 View Controllerのパラダイムが少し歪んでいる。
Iは、次の解決策を思い付いた:
- B及びCは、概念的に異なるクラスAのインスタンスへの参照を維持し は、そのインスタンス上で動作する( ビュー/コントローラ)として実装されています。 AにB及びCだけグループ化 方法ので
- 、私は多くのこれらの溶液のいずれかを好きではないA.
のインスタンス上で動作する機能を持つモジュールを作成(2僅かにより良好1 )、しかし、私はこの問題を解決するためのより良い/クリーナー/もっとpythonic方法があるかどうかわからない。すべてのポインタ?
私は、私たちにはTypeErrorを示すのポイントは何であったかはわからないので、私は私の答えでそれを無視します。 –
1&2は完全に慣れているようです。いくつかの関数をまとめてグループにまとめたい場合は、クラスを作成しないでください。 – delnan