_debugger_case1.py

来自「Python Development Environment (Python I」· Python 代码 · 共 52 行

PY
52
字号
import sys
import weakref

def SetUp():
    observable = Observable()
    observer = Observer()
    observable.AddObserver(observer)
    return observable


class Observable(object):
    def __init__(self):
        self.observers = []
        
    def AddObserver(self, observer):
        print 'observer', observer
        ref = weakref.ref(observer)
        self.observers.append(ref)
        print 'weakref:', ref()
        
    def Notify(self):
        for o in self.observers:
            o = o()
            
            
            if o is not None:
                print 'still observing', o
                import gc
                print 'number of referrers:', len(gc.get_referrers(o))
                frame = gc.get_referrers(o)[0]
                frame_referrers = gc.get_referrers(frame)
                print 'frame referrer', frame_referrers
                referrers1 = gc.get_referrers(frame_referrers[1])
                print referrers1
                print >> sys.stderr, 'TEST FAILED: The observer should have died, even when running in debug'
            else:
                print 'TEST SUCEEDED: observer died'
                
            sys.stdout.flush()
            sys.stderr.flush()
                
class Observer(object):
    pass

    
def main():
    observable = SetUp()
    observable.Notify()
    
    
if __name__ == '__main__':
    main()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?