Я хочу создать класс, и все объекты должны иметь уникальный идентификатор key
, и если я пытаюсь создать новый экземпляр объекта с ранее существующим ключом, экземпляр должен быть таким же, как тот что уже существует.
Похоже на одноэлементный класс, но в этом случае вместо одного класса их много, но они разные.
Мой первый подход был такой
class Master:
existent = {}
def __init__(self, key, value=None):
try:
self = Master.existent[key]
return
except KeyError:
Master.existent[key] = self
# Rest of the __init__ method
Но когда я сравниваю два объекта, что-то вроде этого A = Master('A', 0)
и B = Master('B', 0)
, B
не разделяет никаких атрибутов, которые он должен иметь, и если в мастер-классе есть _method
(одно подчеркивание) , Также не появляется.
Есть идеи, как я мог это сделать?
Я думаю, что это похоже на шаблон фабричных методов, но мне все еще не удается найти параллели или как реализовать их в элегантной форме.
EDIT:
У класса в основном есть два свойства, и это все, но многие вещи могут наследовать и / или содержать экземпляры этого типа, то есть, easy , как я думал, я мог сделать это, извлекать свойства из существующий экземпляр, соответствующий указанному key
, присвоение их новому экземпляру и злоупотребление тем, что они будут иметь одинаковый вывод hash
, а оператор equal
будет вести себя в соответствии с хэшами, поэтому я могу использовать ==
и is
операторов без проблем.
Эта идея решает мою проблему, но в целом я думаю, что это может быть общий или достаточно интересный сценарий для решения.