title: Python unimplemented methods versus abstract methods, which is more pythonic? PyCharm doesn't like methods not implemented in the base class
body: <p>I have a specific problem closely related to PyCharm (Community 3.1.1). The following simple example illustrates this. I will use the screenshot of PyCharm rather than type the code, for reasons that will be clear shortly.</p>
  
  <p><img src="https://i.stack.imgur.com/TV9cV.png" alt=""></p>
  
  <p>As you can see, the call to <code>self.say_hello()</code> is highlighted in yellow by PyCharm, and presumably this is because <code>say_hello()</code> is not implemented in the <code>Base</code> class. The fact that <code>say_hello()</code> is not implemented in the base class is intentional on my part, because I want a kind of "abstract" effect, so that an instance of <code>Base</code> cannot call <code>say_hello()</code> (and therefore shouldn't call <code>hello()</code>), but that an instance of <code>Child</code> can call <code>hello()</code> (implemented in the <code>Base</code> class). How do I get this "abstract" effect without PyCharm complaining?</p>
  
  <p>As I learned from <a href="https://stackoverflow.com/questions/5856963/abstract-methods-in-python">here</a>, I could use the <code>abc</code> module. But that, to me, would be rather cumbersome and somewhat not pythonic. What are your recommendations?</p>