2015-07-13 4 views
-1

Я использую вложенные классы структурировать свои данные и данные конкретные функции (не может получить отступы прямо в фрагменте кода, извините):Альтернатива вложенным классам?

class test: 
    class AA: 
     def __init__(self): 
      self.name = "ZZ-top" 
      self.flag = False 
     def reset(self): 
      self.name = "AArdvark" 
      self.flag = True 
    class BB: 
     def __init__(self): 
      self.num = 11 
     def checker(self): 
      if self.num > 10: 
       test.AA.name = "Toasty"      
    def __init__(self): 
     self.AA = self.AA() 
     self.BB = self.BB() 

Для меня это опрятная, самый простой способ отделить мой данные по классам. У меня часто есть те же данные, поступающие из разных источников, и хотелось бы, чтобы это было представлено. Например. data.image.latitude и data.csv.latitude. Я также хотел бы иметь функции, которые получают или устанавливают данные из нескольких классов. Например: функция проверки.

Проблема заключается в том, что python не похож на вложенные классы. Я столкнулся с проблемами с рассолом (Can not pickle class «test.BB.num». Это, кажется, общая проблема сокета/вложенного класса), а некоторые функции, которые хотят получить информацию о соседних классах, не работают. Думаю, я должен отказаться от вложенных классов.

Что такое правильный способ структурирования этих данных python'esque? Должен ли я просто иметь один чудовищно большой класс (self.AA_timeofday ... self.ZZ_timeofday) со всеми функциями в нем или есть что-то лучше?

ответ

0

Там редко потребность в классах гнезда, и, кроме оберточной имя класса в другом пространстве имен и разбивая травление нет никакой разницы в функциональности.

Просто положи классы на глобальном уровне модуля:

class AA: 
    def __init__(self): 
     self.name = "ZZ-top" 
     self.flag = False 
    def reset(self): 
     self.name = "AArdvark" 
     self.flag = True 

class BB: 
    def __init__(self): 
     self.num = 11 
    def checker(self): 
     if self.num > 10: 
      test.AA.name = "Toasty" 

class test:     
    def __init__(self): 
     self.AA = AA() 
     self.BB = BB() 
+0

Япом, что сделал это. Простое решение, которое я не могу поверить, что пропустил. – RedM

Смежные вопросы