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

标签 python metaprogramming

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

我能找到的唯一愚蠢的解决方案是在每个对象的 __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/

相关文章:

c++ - 检查子类的构造函数是否在 C++ 中是公共(public)的

Python 将字符串添加到包含多个项目的匹配列表中

python - 纯 Python 逆误差函数

python - 正则表达式和unicode在python中提取价格

haskell - 在类型化模板 Haskell 中使用约束

c++ - 使用 Boost.Hana 定义编译时 Comparable 对象

python - 将一行插入 NumPy 数组

python - 为什么信号不发出?

ruby - 为什么 instance_exec 不覆盖 Proc 对象绑定(bind)中存在的局部变量?

ruby - 在 Ruby 中为元编程定义方法参数