Python中文
首页
教程
问答
标签
搜索
登录
注册
Python工厂动态实例化
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我是一名C#程序员,我希望建立一个简单的工厂。遵守命令:</p> <pre class="lang-py prettyprint-override"><code>class ShapeFactory: _registry: Dict[ShapeType, 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.get(key) raise KeyError(key) def Register(self, key: ShapeType, value: Shape) -> None: if key not in self._registry: self._registry[key] = value raise KeyError(type) </code></pre> <p>问题是<code>Create</code>总是返回相同的实例,例如,<code>Circle</code>。如何在允许OCP的同时实现动态实例化对象的方法</p> <p>编辑: 进一步阐述我的观点;在C#中,我将我的字典声明为:</p> <pre class="lang-cs prettyprint-override"><code>Dictionary<ShapeType, Func<Shape>> _registry = new Dictionary{ [ShapeType.Shape] = () => new Shape(), [ShapeType.Circle] = () => new Circle(), [ShapeType.Square] = () => new Square() } </code></pre> <p>这将始终为字典的每个值返回一个新实例化的对象。这就是我希望在python中重现的效果</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>动态创建对象的简单python方法是:</p> <pre><code>class C: def __init__(self): self.name = "C" class D: def __init__(self): self.name = "D" dic = {"C": C, "D": D} x1 = dic["C"]() x2 = dic["C"]() print(x1 is x2) #prints False </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
使用Python创建一个非常大的二进制频率矩阵来运行协作过滤
3 回答
使用Python创建一张HTML网页,其中在不同颜色中重复n遍显示“Hello World”的方法
2 回答
使用Python创建一组唯一的值length L
5 回答
使用python创建不同表格的透视表
5 回答
使用python创建不和谐频道
7 回答
使用python创建不存在的多个文件夹
3 回答
使用python创建串行远程文件
6 回答
使用python创建交互式仪表板时出现问题
6 回答
使用python创建交互式绘图
10 回答
使用python创建交互式自动电子邮件
1 回答
使用Python创建价格列表
4 回答
使用python创建修改的txt文件
5 回答
使用Python创建全局变量,初始化后更改值
7 回答
使用Python创建关键字搜索词数组
8 回答
使用Python创建具有不均匀块大小/堆叠条形图的热图
2 回答
使用Python创建具有依赖于另一列的值的列
8 回答
使用Python创建具有多列的HTML表
8 回答
使用Python创建具有时间范围数据的等距数据帧
3 回答
使用Python创建具有特定顺序或属性的XML文件
2 回答
使用Python创建具有级联功能的搜索栏
10 回答