gpt4 book ai didi

python - 如何获得对在 python 中实现描述符对象的所有类的引用

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:43 26 4
gpt4 key购买 nike

我正在创建一个描述符,我想在其中创建一个列表,其中包含对实现它的所有对象的引用,它应该是某种快捷方式,我可以在其中调用下一个实例的方法实例。

我能找到的唯一愚蠢的解决方案是在每个对象的 __init__ 上触发描述符上的 setter ,将项目添加到列表中,即使该解决方案确实有效,我也能感觉到这是错的。

除了在 __init__ 上设置任意值以触发 setter 之外,是否有人有更好的方法将类实例添加到描述符列表?

class GetResult(object):
def __init__(self, value):
self.instances = []
def __get__(self, instance, owner):
return self
def __set__(self, instance, value):
self.instances.append(instance)
def getInstances(self):
return self.instances




class A(object):
result = GetResult(0)
def __init__(self):
self.result = 0
def getAll(self):
print self.result.getInstances()




a1 = A()
a2 = A()
a3 = A()

print a2.result.getInstances()
>> [<__main__.A object at 0x02302DF0>, <__main__.A object at 0x02302E10>, <__main__.Aobject at 0x02302E30>]

最佳答案

如果这就是您的描述符所做的全部工作,则有点滥用描述符协议(protocol)。只是重写你的类 __new____init__ 会更简单:

class Foo(object):
_instances = []

def __new__(cls, *args, **kw):
instance = object.__new__(cls)
cls._instances.append(instance)
return instance

@classmethod
def get_instances(cls):
return self._instances

关于python - 如何获得对在 python 中实现描述符对象的所有类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20784474/

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