class Person:
def __init__(self, name):
self.name = name
self.bucket = []
def announce(self, *args):
# ???
pass
def put(self, item):
self.bucket.append(item)
p1 = Person("ya")
p2 = Person("yu")
p1.put("apple")
现在我想以某种方式向所有 Person() 对象宣布我的桶中有一个苹果,如果他们愿意,他们也应该将一个苹果放入桶中。
最佳答案
简单的实现可以是:
class Person:
persons = set()
def __init__(self, name):
self.name = name
self.bucket = []
self.persons.add(self)
def announce(self, msg):
print("[{}]: {}".format(self.name,msg))
@classmethod
def broadcast(cls, person, msg):
for p in cls.persons:
if not p is person:
p.announce(msg)
def put(self, item):
self.bucket.append(item)
self.broadcast(self, '{}: got {} in my bucket!'.format(self.name, item))
p1 = Person("ya")
p2 = Person("yu")
p1.put("apple")
Person.broadcast(None, "Hey! Everybody can broadcast message!")
输出:
[yu]: "ya: got apple in my bucket!
[ya]: Hey! Everybody can broadcast message!
[yu]: Hey! Everybody can broadcast message!
该实现缺乏
- 没有
注销
实现 - 无线程保存
- 可以通知
Person
及其子类 - 这只是一个玩具,您需要根据实际情况对其进行调整
也许你最好实现一个 Observer pattern比那个简单的要好。
关于python - 如何将 "broadcast"消息发送给一个类的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27602136/