我正在寻找一种方法将函数应用于类的所有实例。一个例子:
class my_class:
def __init__(self, number):
self.my_value = number
self.double = number * 2
@staticmethod
def crunch_all():
# pseudocode starts here
for instances in my_class:
instance.new_value = instance.my_value + 1
因此命令my_class.crunch_all()
应该向所有现有实例添加新属性new_value
。我猜我必须使用@staticmethod
使其成为“全局”功能。
我知道我可以通过在my_class.instances.append(number)
中添加__init__
之类的内容来跟踪正在定义的实例,然后循环遍历my_class.instances
,但到目前为止我没有运气无论是。另外,我想知道是否存在更通用的东西。这甚至可能吗?
答案 0 :(得分:6)
在初始化时注册对象(即__init__
),并为该类定义类方法(即@classmethod
): / p>
class Foo(object):
objs = [] # registrar
def __init__(self, num):
# register the new object with the class
Foo.objs.append(self)
self.my_value = num
@classmethod
def crunch_all(cls):
for obj in cls.objs:
obj.new_value = obj.my_value + 1
示例:
>>> a, b = Foo(5), Foo(7)
>>> Foo.crunch_all()
>>> a.new_value
6
>>> b.new_value
8