title: Prevent instantiation of an abstract class
body: <p>In Java, we can prevent instantiation of a class by making it an abstract class. I thought python would behave the same way. But to my surprise, I found that I can create an object of an abstract class:</p>
  
  <pre><code>from abc import ABCMeta
  class Foo(metaclass=ABCMeta):
      pass
  Foo()
  </code></pre>
  
  <p>Why does python allow this and how can I prevent this?</p>