2016-12-06 15 views
0

「Waveplate」というデバイスと通信するために作成したクラスです。 "Waveplate"クラスは、serial.Serial Baseclassの属性とメソッドを継承します。しかし、あなたが見るように、ベースクラスserial.Serialを初期化する必要があります。私が作品の下でやったことは、私の質問です、これは最もエレガントな方法ですか?クラス '__init__メソッド内のベースクラスの初期化

import time 
import serial 

class WavePlate(serial.Serial): 
""" This class returns an instance that contains the attributes and methods of a ``serial.Serial`` object.  
""" 
    def __init__(self, p, brate): 
     """Here's the constructor. """ 
     self.p = p 
     self.brate = brate 

     serial.Serial.__init__(self, port=self.p, baudrate=self.brate, parity=serial.PARITY_NONE, 
          stopbits=serial.STOPBITS_ONE) 
+2

[Pythonの 'super()'はスーパーだと思っています!](https://rhettinger.wordpress.com/2011/05/26/super-considered-super/) – AChampion

+1

通常は、ベースクラス '__init__'を最初に呼び出します次に、子クラスのために残されたものを実行します。それはあなたが 'self.p'と' self.brate'を明示的に設定していて、 'Serial .__ init__'に同じ値を渡しているという疑わしいものとして私を襲います。 – chepner

+0

ありがとうございました.. super()は超驚くほど聞こえます – Ravi

答えて

0

あなたはsuperを使用する必要があります。

のpython 3では:

パイソン2では
class WavePlate(serial.Serial): 
""" This class returns an instance that contains the attributes and methods of a ``serial.Serial`` object.  
""" 
    def __init__(self, p, brate): 
     """Here's the constructor. """ 
     self.p = p 
     self.brate = brate 

     super().__init__(port=self.p, baudrate=self.brate, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) 

class WavePlate(serial.Serial): 
""" This class returns an instance that contains the attributes and methods of a ``serial.Serial`` object.  
""" 
    def __init__(self, p, brate): 
     """Here's the constructor. """ 
     self.p = p 
     self.brate = brate 

     super(WavePlate, self).__init__(port=self.p, baudrate=self.brate, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) 

:時間のほとんどは、あなたが呼び出したいです宣言を行う前にスーパークラスのコンストラクタ子コンストラクタ。

+0

ありがとうございます..私はベースクラスの初期化ステップに渡されていたインスタンス属性を削除しました – Ravi

関連する問題