次のPythonコードの部分は、スーパークラスを、1つまたは複数のサブクラスが使用する関数のリポジトリとしてのみ使用します。
class Class(object):
''' A trivial repository for functions to be inherited '''
def function(self):
print self
class Subclass(Class):
''' A subclass where the action is'''
def __init__(self):
pass
subitem = Subclass()
subitem.function()
これは、その目的に合った最小限のコーディングのようです。
ただし、同じことをコーディングするためのより良い方法は、スーパークラスにコンストラクターを用意し、サブクラスコンストラクター内で呼び出すことだと主張されたが、一種のより緊密なカップリングであるとの指摘はない。
class Class(object):
''' The function repository, now featuring a constructor'''
def __init__(self):
pass
def function(self):
print self
class Subclass(Class):
''' The same subclass, but its constructor invokes the superclass constructor'''
def __init__(self):
Class.__init__(self)
subitem = Subclass()
subitem.function()
問題は...サブクラス化の2番目の方法が最初の方法より「優れている」とはどのようなものでしょうか。優れているとは、より一般的で、さまざまな状況に適用できることなどを意味します。
一緒に考えてくれてありがとう。
self
のコンストラクターでClass
に変数を追加し、Subclass
のコンストラクターでClass.__init__()
を呼び出さない場合、これらの変数はSubclass
オブジェクト内。
例については その質問 を参照してください。
あなたの場合、Class
は単なる関数リポジトリです。したがって、違いはありません。ただし、将来的には、そのクラスの関数が連携して動作するように変数を追加する必要があるかもしれません。そのためには、self
を使用すると便利です。
self
を後で使用する場合は、ここでClass.__init__()
を追加すると、時間を節約できる場合があります。実際、Subclass
コンストラクターでその行を忘れたことを理解するには、長い時間がかかる場合があります。