擅长:python、mysql、java
<p>在Python 3.6中,应该在不使用元类的情况下阻止子类化,如下所示:</p>
<pre><code>class SomeBase:
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
if cls is not SomeBase:
raise TypeError("SomeBase does not support polymorphism. Use composition over inheritance.")
class Derived(SomeBase):
pass
</code></pre>
<p>在Python 3.8中,还应使用<code>final</code>装饰器来引发类型检查错误:</p>
<pre><code>from typing import final
@final
class SomeBase:
...
</code></pre>
<p>类型检查由MyPy之类的程序完成,这是可选的</p>