擅长:python、mysql、java
<p>这里有一个在实践中也非常有效的替代方法,不用在每次创建类实例时都检查整个字典。在</p>
<p>(py2和py3兼容)</p>
<p>用法:</p>
<pre><code>class Bar():
required_property_1 = ''
def required_method(self):
pass
# Module compile time check that Foo implements Bar
@implements(Bar)
class Foo(UnknownBaseClassUnrelatedToBar):
required_property_1
def required_method(self):
pass
# Run time check that Foo uses @implements or defines its own __implements() member
def accepts_bar(self, anything):
if not has_api(anything, Bar):
raise Exception('Target does not implement Bar')
...
</code></pre>
<p>当@implements(Stream、Folder、Bar)都需要一些相同的方法时,您也可以做一些显而易见的事情,这使得这实际上比继承更有用。在</p>
<p>代码:</p>
^{pr2}$