擅长:python、mysql、java
<p>更好的方法是使用<a href="https://docs.python.org/3/library/abc.html" rel="nofollow noreferrer">Abstract Base Classes</a>:</p>
<pre><code>import abc
class Foo(abc.ABC):
@property
@abc.abstractmethod
def demo_attribute(self):
raise NotImplementedError
@abc.abstractmethod
def demo_method(self):
raise NotImplementedError
class BadBar(Foo):
pass
class GoodBar(Foo):
demo_attribute = 'yes'
def demo_method(self):
return self.demo_attribute
bad_bar = BadBar()
# TypeError: Can't instantiate abstract class BadBar \
# with abstract methods demo_attribute, demo_method
good_bar = GoodBar()
# OK
</code></pre>
<p>请注意,您应该仍然拥有<code>raise NotImplementedError</code>,而不是<code>pass</code>,因为没有任何东西阻止继承类调用<code>super().demo_method()</code>,如果抽象<code>demo_method</code>只是<code>pass</code>,那么这将无声地失败。</p>