Python 官方文档:入门教程 => 点击学习
问题内容 假设我有这个简单的课程: class person: def __init__(self, name, id): self.name = name
假设我有这个简单的课程:
class person:
def __init__(self, name, id):
self.name = name
self.id = id
以及以下实例:
tom = person('tom', 12)
dick = person('dick', 14)
harry = person('harry', 16)
但我希望我的模块的用户能够创建这些人的多个实例,而不必调用 person
构造函数,因为 name
和 id
应仅在一个位置声明。
选项:
使用 copy
或 deepcopy
。这将提供我需要的功能,但每次我想使用 tom
时,我都必须记住创建他的副本。这太笨重了。
创建 tom
类
class Tom(Person):
def __init__(self):
super().__init__('Tom', 12)
这更干净一些,因为每次我想要一个新的 tom
时,我都可以执行 tom()
,但这需要编写大量代码,而且不是很干燥。
python 中是否有其他语法糖可以使这种事情变得更容易?
我认为这是工厂/注册表类型模式的一个很好的用例。这个想法是为类和单个注册表字典实现一个替代的方便构造函数,该字典存储与给定标签相对应的配置。看一下下面的例子:
person_reGIStry = {
"tom": {"name": "tom", "id": 12},
"jerry": {"name": "jerry", "id": 13},
"dick": {"name": "dick", "id": 14},
}
class person:
def __init__(self, name, id):
self.name = name
self.id = id
@claSSMethod
def from_tag(cls, tag):
"""create a person from a tag"""
if tag not in person_registry:
raise valueerror(f"not a valid tag {tag}, choose from {list(person_registry)}")
return cls(**person_registry[tag])
print(person.from_tag("tom"))
现在您可以导入 person
类并从较短的标签创建实例,而实际数据存储在一个位置,即 person_registry
字典中。如果你想减少冗长,你也可以
使用位置参数,但关键字参数通常更可取,因为更明确(Python 的 zen)。
这种模式的优点在于它实际上是可扩展的。因此用户可以扩展 person_registry
字典,例如:
from persons import Person, PERSON_REGISTRY
PERSON_REGISTRY["liz"] = {"name": "elizabeth", "id": 23}
liz = Person.from_tag("liz")
我希望这会有所帮助。
以上就是Python语法糖生成同一类的相同实例?的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: Python语法糖生成同一类的相同实例?
本文链接: https://www.lsjlt.com/news/562190.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0