Python: как визуально сгруппировать методы класса в разделы

Когда дело доходит до организации моего кода, я немного склонен к педантичности, поэтому я попытался придумать способы визуально сгруппировать мои методы класса в логические части / разделы. Мой вопрос заключается в том, существуют ли какие-либо предпочтительные способы визуального разделения групп методов класса в редакторах Python? PEP8 не упоминает эту проблему, поэтому я не уверен, как это сделать "правильно".

Я предполагаю, что это желание исходит от моего использования XCode, где я бы добавил #pragma mark - XY разделить разделы метода. Я использую Sublime Text для Python, есть ли редакторы или IDE, которые поддерживают определенный стиль группировки?

Поэтому пример группы, которую я сейчас использую, состоит в том, чтобы логически похожие методы располагались один под другим, но добавляли больше пробелов и горизонтальную линию (до тех пор, пока она не достигнет границы 80 символов) между "группами", например, так:

class Foo (object):
    def __init__(self)

    # ------------------------- Properties
    @property
    def foo(self)
    @property
    def bar(self)

    # ------------------------- Querying
    def find(self, id)
    def find_siblings(self)
    def find_related(self, attr)

    # ------------------------- Class Methods
    @classmethod
    def setup(cls)
    @classmethod
    def purge_cache(cls)

    # ------------------------- Utilities
    def __str__(self)
    def __unicode__(self)
    def __repr__(self)

1 ответ

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

В этом случае вы бы сделали что-то вроде:

class MyClass():
   """
   This class provides a number of methods grouped accordingly:
      Methods to do with a:
       - a_do_something - Quick Summary
       - a_do_something_else - Quick Summary
      Methods to do with b:
       - b_do_something - Quick Summary
       - b_do_something_else - Quick Summary
   """
   def __init__(self):
       """ Initialise MyClass """
       pass  # More likely some code

   if True:  # Allow group folding for Functional Group A
   ## 
   ## The following functions and class methods are to do with a:
   ## 
       def a_do_something(params):
          """ Quick Summary

          Parameters:
              Describe Each
          Returns:
              What

          Long description text.
          """
          pass # really the code for this function

и т.п.

Однако вы можете захотеть разбить любой код, который будет достаточно длинным, чтобы использовать его, на большее количество классов и группировать вещи таким образом.

Другие вопросы по тегам