ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

Pythonでclassの中にclassを作成する

class TemperatureHumidity:
  class Temperature:
    def __init__(self):
      self.value = None
      self.count = 0
    def print(self):
      print("Temperature:", self.value, self.count)
  class Humidity:
    def __init__(self):
    self.value = None
    self.count = 0
    def print(self):
      print("Humidity:", self.value, self.count)

  def __init__(self):
    self.t = self.Temperature()
    self.h = self.Humidity()
  def print(self):
    self.t.print()
    self.h.print()
  def increment_count(self, _obj):
    _obj.count += 1

if __name__ == "__main__":
  t_h = TemperatureHumidity()
  t_h.t.print()
  t_h.h.print()
  t_h.increment_count(t_h.t)
  t_h.t.print()
  t_h.h.print()

継承するときはselfはいらない

以下のコードはTemperatureクラスがDataクラスを継承していますが、self.Dataと書いてはいけません。

class TemperatureHumidity:
  class Data:
    def __init__(self):
      self.value = None
      self.count = 0
  class Temperature(Data):
    def __init__(self):
      super().__init__()
    def print(self):
      print("Temperature:", self.value, self.count)
  class Humidity(Data):
    def __init__(self):
      super().__init__()
    def print(self):
      print("Humidity:", self.value, self.count)

  def __init__(self):
    self.t = self.Temperature()
    self.h = self.Humidity()
  def print(self):
    self.t.print()
    self.h.print()
  def increment_count(self, _obj):
    _obj.count += 1

if __name__ == "__main__":
  t_h = TemperatureHumidity()
  t_h.t.print()
  t_h.h.print()
  t_h.increment_count(t_h.t)
  t_h.t.print()
  t_h.h.print()