Skip to content

Instantly share code, notes, and snippets.

@kratsg
Created June 30, 2021 15:44
Show Gist options
  • Save kratsg/611d01f952e6ecb9dcb7dfb7b9235e82 to your computer and use it in GitHub Desktop.
Save kratsg/611d01f952e6ecb9dcb7dfb7b9235e82 to your computer and use it in GitHub Desktop.
import weakref
#import click
import pyhf
__events = {}
def subscribe(event, func):
global __events
__events.setdefault(event, Callables()).append(func)
class Greet:
def __init__(self, name):
self.name = name
subscribe('event', self.method)
def method(self):
print(f"{self.name} called!")
def __del__(self):
print(f"{self.name} dying!")
class WeakList(list):
def append(self, item):
list.append(self, weakref.WeakMethod(item, self.remove))
class Callables(WeakList):
def __call__(self, *args, **kwargs):
for func in self:
# weakref: needs to be de-ref'd first before calling
func()(*args, **kwargs)
def __repr__(self):
return "Callables(%s)" % list.__repr__(self)
items = []
for name in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
items.append(Greet(name))
del items[6:8]
for k,v in __events.items():
v()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment