运行此代码:
import weakref
class A(object):
_instances = []
def __init__(self):
self._instances.append(weakref.ref(self))
@property
@classmethod
def instances(cls):
for inst_ref in cls._instances:
inst = inst_ref()
if inst is not None:
yield inst
foo = A()
bar = A()
for inst in A.instances:
print inst
我得到这个错误:
Traceback (most recent call last):
File "test.py", line 18, in <module>
for inst in A.instances:
TypeError: 'property' object is not iterable
我搞不懂有一个类方法如何表现得像一个属性(没有括号)。
属性始终应用于实例,而不是类。
这样做的方法是定义一个元类,该元类在其自己的实例方法上定义属性,因为类是其元类的实例:
现在可以按预期工作了:
下面是将描述符用于类的一种方法:
参考文献:
一种解决方案是,使用
WeakKeyDictionary
,这是iterable,就像您想要的那样:相关问题 更多 >
编程相关推荐