スーパークラスのサブクラスメソッドを呼び出す方法を知りたいと思います。Pythonのスーパークラスのサブクラスメソッドを呼び出す方法
答えて
これは非常に広い質問です。あなたがサンプルコードを提供していないとして、私は最も簡単な例を紹介します:
class A(object):
def meth1(self, a):
self.meth2(a, a*a)
class B(A):
def meth2(self, a, b):
return b/a
b = B()
b.meth1(10)
'a'はどこから来たのですか?どこのメソッド 'meth'? –
@Tichodroma申し訳ありませんが、私のせいです。書くときに考えるべきである;-)今修正された。 – glglgl
クラスが別々のモジュールにある場合はどうなりますか? file2.pyすなわちインポートFILE1 クラステストケース(file1.TestBase): はDEF(自己)を実行: self.pass() file1.pyクラスTestBase: はDEF(自己を渡します): print "PASS" testBase = TestBase() testBase.execute() – ThePracticalOne
サブクラスの背後にあるポイントは、それががと変更スーパークラスの動作を拡張することです。スーパークラスは、を知ることができません。サブクラスがどのようにそれを拡張するのですか?
編集:しかし、スーパークラスが知っていることも可能である、サブクラスがそれを拡張します。確かに、これは良いデザインだと思います。ここで
は私が試したものです:
class A(object):
def x(self):
print self.y()
class B(A):
def y(self):
return 1
>>> B().x()
1
だから、あなたはいくつかの特定の問題を抱えていない限り、単に基底クラスにサブクラスからメソッドを呼び出すと、それだけで動作するはずです。
なぜ誰かがこれをやろうと思っているのだろうか。なぜ私は 'B'がそれをどのように拡張するのかを前もって知らないように' A'を書いていますか? –
@Tichodroma:ええ、ここにいくつかのコードの匂いがあります。しかし、おそらくそれは多分です。現実と同期していないOPの講師;) –
@Tichodroma多分あなたはそれを知らないのですか? 'A'を、例えば3つまたは4つの方法で拡張できる基本クラスとしましょう。どのように実装されているか、どのシグネチャしか提供していないかはわかりません。私はそのようなことを頻繁に見てきました。 「MySQLdb」にあります。 – glglgl
これは、抽象メソッドの使用に関連していると思います。親クラスは、サブクラスが実装すべきメソッドを定義し、親クラスはこれらのメソッドが実装されることを認識します。同様の構造が、例えばJavaに存在する。 Pythonでこれらを使用して
はよくここで議論されていますAbstract methods in Python
私は、これがしばしば使用されるパターンであると考えています。
class A(object):
def x(self):
self.y()
def y(self):
print('default behavior')
class B(A):
def y(self):
print('Child B behavior')
class C(A):
def z(self):
pass
>>>B().x()
Child B behavior
>>>C().x()
default behavior
これは、抽象クラスのようなものですが、デフォルト動作を提供します。しかし、私の頭の上からパターンの名前を覚えていない。
C++の用語を使用すると、多態性だけになります。しかし、Pythonを使用すると、すべてに当てはまります... – matsjoyce
- 1. スーパークラスのサブクラスメソッドを呼び出す
- 2. スーパークラスからサブクラスメソッドを呼び出す
- 3. C++スーパークラスを呼び出す
- 4. サブクラスのメソッドをスーパークラスのオブジェクトから呼び出す方法は?
- 5. シーケンス図でスーパークラスへの呼び出しを表す方法は?
- 6. Clojure gen-classメソッドでスーパークラスのメソッドを呼び出す方法は?
- 7. スーパークラスからコンストラクタを呼び出す方法
- 8. サブクラスのスーパークラスの呼び出し関数
- 9. JavaScriptで「スーパークラス」コンストラクタを呼び出す
- 10. Objective Cサブクラスの初期化メソッドがスーパークラスのinitializeメソッドを呼び出す方法
- 11. スーパークラスを拡張し、スーパークラスのコンストラクタパラメータでメソッドまたは遅延値を呼び出す方法
- 12. Javaのスーパークラスを呼び出し、標準的な方法を用いて
- 13. ルビのスーパークラスの別のメソッドを呼び出す
- 14. はサブクラスからスーパークラスのメソッドを呼び出す - JavaScriptの
- 15. 私のPythonモジュールを呼び出すPython
- 16. pyqt4 pythonで別のウィンドウを呼び出す方法は?
- 17. 特定のPythonバージョンをscript.py内で呼び出す方法 - Windows
- 18. WindowsのpythonソースコードからJythonインタプリタを呼び出す方法
- 19. Python 3.xコマンドを呼び出すクロスプラットフォームの方法
- 20. Extendscriptの中からPythonやシェルスクリプトを呼び出す方法は?
- 21. Objective-Cのスーパークラス内で 'self'を呼び出す
- 22. スーパークラスのスーパークラスメソッドを呼び出しますか?
- 23. Javaのサブクラスコンストラクタからスーパークラスを呼び出す
- 24. ベースクラスオブジェクトでサブクラスメソッドを呼び出すにはどうすればよいですか?
- 25. スーパークラスへのアクセスを持つサブクラスでの呼び出しメソッド
- 26. UITextViewを呼び出す方法addTargetメソッドを呼び出す
- 27. 電話の呼び出し画面の呼び出し方法
- 28. Pythonメソッドを呼び出す
- 29. Pythonを呼び出すメソッド
- 30. ストアドプロシージャpythonを呼び出す
あなたはあなたの質問をより明示できますか? –