title: Is it pythonic to use __init__.py modules of a package for generic, abstract classes?
body: <p>I am developing a rather complex application for my company following the object-oriented model in python3. The application contains several packages and sub-packages, each - of course - containing an __init__.py module.</p>
  
  <p>I mostly used those __init__.py modules to declare generic classes for the package inside them, which are intended to be used as abstract templates for their respective package only.</p>
  
  <p>My question is now: Is this a "nice" / "correct" / "pythonic" way to use the __init__.py module(s)? Or shall I rather declare my generic classes somewhere else?</p>
  
  <p>To give an example, let's assume a package <code>mypkg</code>:</p>
  
  <p><code>mypkg.__init__.py</code>:</p>
  
  <pre><code>class Foo(object):
      __some_attr = None
  
      def __init__(self, some_attr):
          self.__some_attr = some_attr
  
      @property
      def some_attr(self):
          return self.__some_attr
  
      @some_attr.setter
      def some_attr(self, val):
          self.__some_attr = val
  </code></pre>
  
  <p><code>mypkg.myfoo.py</code>:</p>
  
  <pre><code>from . import Foo
  
  class MyFoo(Foo):
      def __init__(self):
          super().__init__("this is my implemented value")
  
      def printme(self):
          print(self.some_attr)
  </code></pre>