2013-12-02 2 views
1

Допустимо ли подклассы tables.Group?подклассифицирующие таблицы. Класс группы

Следующий код работает отлично

In [1]: import tables 

In [2]: class Friendly_group(tables.Group): 
    ...:  def __repr__(self): 
    ...:   return 'hello!' 
    ...:  

In [3]: hf = tables.open_file('data', mode='w') 

In [4]: fgroup = Friendly_group(hf.root, 'fgroup', new=True) 

In [5]: hf 
Out[5]: 
File(filename=data, title='', mode='w', root_uep='/', filters=Filters(complevel=0, shuffle=False, fletcher32=False)) 
/(RootGroup) '' 
/fgroup (Friendly_group) '' 


In [6]: hf.root.fgroup 
Out[6]: hello! 

Но после прочтения назад, что группа перестает быть дружелюбные

In [7]: hf.close() 

In [8]: hf = tables.open_file('data', mode='r') 

In [9]: hf 
Out[9]: 
File(filename=data, title='', mode='r', root_uep='/', filters=Filters(complevel=0, shuffle=False, fletcher32=False)) 
/(RootGroup) '' 
/fgroup (Group) '' 


In [10]: hf.root.fgroup 
Out[10]: 
/fgroup (Group) '' 
    children := [] 

SO шашка заставляет меня, чтобы добавить некоторые детали на этот пост, но я действительно не» Я знаю, как я могу увеличить ясность моего вопроса, поэтому, пожалуйста, извините меня за этот фиктивный текст.

ответ

1

Да, это возможно. Отсутствующий фрагмент, который у вас отсутствует, необходим для depersistence - переопределить атрибут класса _c_classid. Вероятно, вы хотите посмотреть другие подклассы групп, которые присутствуют в tables/group.py. Например, возьмите TransactionGroupG (лишенную некоторые функции обратной совместимости),

class TransactionGroupG(NotLoggedMixin, Group): 
    _c_classid = 'TRANSGROUP' 

    def _g_width_warning(self): 
     warnings.warn("""\ 
the number of transactions is exceeding the recommended maximum (%d);\ 
be ready to see PyTables asking for *lots* of memory and possibly slow I/O""" 
         % (self._v_max_group_width,), PerformanceWarning) 

Это довольно минимально.

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