gpt4 book ai didi

python - 如何避免创建具有相同值的对象?

转载 作者:行者123 更新时间:2023-11-28 20:34:01 25 4
gpt4 key购买 nike

我需要创建一个实例不能具有相同值的类。如果您使用已经使用过的值创建实例,您将获得旧的相同实例。

我用特殊的类方法做到了:

class A():
instances = []

def __init__(self, val):
self.val = val

@classmethod
def new(cls, val):
"""
Return instance with same value or create new.
"""
for ins in cls.instances:
if ins.val == val:
return ins
new_ins = A(val)
cls.instances.append(new_ins)
return new_ins

a1 = A.new("x")
a2 = A.new("x")
a3 = A.new("y")

print a1 # <__main__.A instance at 0x05B7FD00> S\ /M\
print a2 # <__main__.A instance at 0x05B7FD00> \A/ \E
print a3 # <__main__.A instance at 0x05B7FD28>

有没有办法不使用 .new 方法,让它更优雅?

最佳答案

你可以试试 functools.lru_cache

例如:

from functools import lru_cache

class A:

@lru_cache()
def __new__(cls, arg):
return super().__new__(cls)

def __init__(self, arg):
self.n = arg

示例用法:

>>> a1 = A('1')
>>> a2 = A('1')
>>> a1 is a2
True
>>> a1.n
'1'
>>> a2.n
'1'

或者,您可以尝试构建自定义缓存类,正如 Raymond Hettinger 在这条推文中所指出的:https://twitter.com/raymondh/status/977613745634471937

关于python - 如何避免创建具有相同值的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49477978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com