1. ホーム
  2. python

[解決済み] ベース(スーパー)クラスを初期化する方法を教えてください。

2022-05-03 16:27:27

質問

Pythonで、以下のようなコードがあるとします。

class SuperClass(object):
    def __init__(self, x):
        self.x = x
        
class SubClass(SuperClass):
    def __init__(self, y):
        self.y = y
        # how do I initialize the SuperClass __init__ here?

を初期化するにはどうすればよいのでしょうか? SuperClass __init__ をサブクラスで使用することはできますか?私はPythonのチュートリアルに沿っていますが、それはカバーされていません。Googleで検索すると、複数のやり方が見つかりました。これを処理する標準的な方法は何ですか?

どのように解決するのですか?

Pythonは(バージョン3まで)"old-style"とnew-styleのクラスをサポートしています。新スタイルのクラスは object で、あなたが使っているもので、そのベースクラスを super() は、例えば

class X(object):
  def __init__(self, x):
    pass

  def doit(self, bar):
    pass

class Y(X):
  def __init__(self):
    super(Y, self).__init__(123)

  def doit(self, foo):
    return super(Y, self).doit(foo)

pythonは古いスタイルのクラスと新しいスタイルのクラスについて知っているので、ベースメソッドを呼び出す方法が複数あります。

完全を期すために、旧式のクラスは基底クラスを使用して明示的に基底メソッドを呼び出す、すなわち

def doit(self, foo):
  return X.doit(self, foo)

でも、もう旧式は使わないはずなので、あまり気にすることはないでしょう。

Python 3は新スタイルのクラスしか知らないので、( object を使用します)。