2016-12-06 4 views
0

Вот класс, который я создал для связи с устройством под названием «Waveplate». Класс Waveplate наследует атрибуты и методы serial.Serial Baseclass. Но, как вы видите, базовый серийный номер. Серийный номер должен быть инициализирован. То, что я сделал ниже, работает, мой вопрос, это самый элегантный способ?Инициализация базового слоя внутри метода класса __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__' first , затем сделайте все, что осталось для дочернего класса. Мне кажется подозрительным, что вы явно устанавливаете 'self.p' и' self.brate', * then * передаете одни и те же значения в 'Serial .__ init__'. – chepner

+0

Спасибо, ребята .. super() звучит супер удивительно – Ravi

ответ

0

Вы должны использовать super:

В Python 3:

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) 

В питоне 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(WavePlate, self).__init__(port=self.p, baudrate=self.brate, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) 

Примечание: Большую часть времени, вы хотите позвонить конструктор суперкласса, прежде чем делать какие-либо заявления в своем дочерний конструктор.

+0

Спасибо большое .. Я удалил атрибуты экземпляра, которые были переданы на этап инициализации базового элемента – Ravi