首页 > 解决方案 > 将函数调用调度到对象集合

问题描述

我不确定问题的标题是否正确。

我正在努力实现以下目标。


class A():
   def __init__(self, name):
       self.name = name
    
   def foo1(self):
       print(1, self.name)

   def foo2(self):
       print(2, self.name)

a1 = A('a1')
a1.foo1() # print '1, a1'

a2 = A('a2')
b = SomeFoo(a1, a2)  # or, SomeFoo([a1, a2])
b.foo1()  # calls a1.foo1(), a2.foo2() 

相似地,

b.foo2()应该调用foo2和。我想是类似的东西。a1a2np.vectorize

这个潜力SomeFoo(类或函数)会被称为什么?

更重要的是,什么是好的写作方式SomeFoo

更新

用和替换print和。printBfoo1foo2

标签: python-3.x

解决方案


有点不清楚你想要达到什么目标,但我猜我猜。

每次调用A()都会创建一个实例。您正在尝试做的事情要求每个实例彼此了解——即,它们具有类共有的属性。

例子:

class A():
    members={}
    def __init__(self, name, func=lambda e: print(self.name)):
        self.name = name
        self.members[name]=func

    def __del__(self):
        del self.members[self.name] 

    def do_all(self):
        for k, func in self.members.items():
            print(k)
            func() 
        
a=A('a1', lambda: print('I am the great and powerful OZ'))  
b=A('b1', lambda: print('paCHOO!')) 

b.do_all()

在实践中:

a=A('a1', lambda: print('I am the great and powerful OZ'))  
b=A('b1', lambda: print('paCHOO!')) 

b.do_all()

印刷:

a1
I am the great and powerful OZ
b1
paCHOO!

推荐阅读