说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)有一个名为 GirlFriend 的类,使用 Python 元类技术,实现允许只能实例化一次,即实现单例模式。要求:
Python 代码如下
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class GirlFriend(metaclass=SingletonMeta):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'Girlfriend: {self.name}, Age: {self.age}'
实例化示例:
# 示例用法
gf1 = GirlFriend('Alice', 25)
print(gf1) # 输出: Girlfriend: Alice, Age: 25
gf2 = GirlFriend('Lily', 26)
# 因为已经有一个对象了,所以返回了第一个对象的属性
print(gf2) # 输出: Girlfriend: Alice, Age: 25
print(gf1 is gf2) # 输出 True
元类是类的类,可以用于控制类的创建行为。通过定义一个元类,在元类中控制类的实例化过程,可以确保只创建一个类的实例。
在这个例子中,SingletonMeta是一个元类,它控制了类的实例化行为。在 __call__
方法中,首先检查类是否已经有实例存在,如果没有则调用父类的 __call__
方法创建一个新的实例,否则直接返回已有的实例。通过使用这个元类,可以确保只有一个实例存在。
查看相关链接中的知识。
(完)
更新时间:2024-08-16 22:55:18 标签:python 习题 元类 单例