擅长:python、mysql、java
<p>您在这个设计中遇到了一些更大的问题</p>
<p>首先,如果类中有一个可变属性,那么应该在类的<code>__init__</code>方法中定义<code>_registry</code>(与实例隔离)</p>
<p>接下来,<code>_registry</code>的type属性是错误的。您有<code>dict</code>个<code>lambda</code>,而不是<code>Shape</code>个实例。你需要<code>Dict[ShapeType, Callable[[], Shape]]</code>。<code>Register</code>方法也有类似的问题</p>
<p>您还应该遵循PEP 8的命名规则。试试这个:</p>
<pre class="lang-py prettyprint-override"><code>class ShapeFactory:
def __init__(self) -> None:
self._registry: Dict[ShapeType, Callable[[], Shape]] = {
ShapeType.Shape: lambda: Shape(),
ShapeType.Circle: lambda: Circle(),
ShapeType.Square: lambda: Square()
}
def create(self, key: ShapeType) -> Shape:
if key in self._registry:
return self._registry[key]()
else:
raise KeyError(key)
def register(self, key: ShapeType, value: Callable[[], Shape]) -> None:
if key not in self._registry:
self._registry[key] = value
else:
raise KeyError(key)
</code></pre>