2017-03-31 | Paul Boddie | file changeset files shortlog | Fixed non-recognition of deferred references in non-module, non-function scopes. |
paul@267 | 1 | class C: |
paul@267 | 2 | def f(self): |
paul@267 | 3 | return 1 |
paul@267 | 4 | |
paul@267 | 5 | def g(self): |
paul@267 | 6 | return self.f() |
paul@267 | 7 | |
paul@267 | 8 | class D(C): |
paul@267 | 9 | pass |
paul@267 | 10 | |
paul@267 | 11 | def f(): |
paul@267 | 12 | return 2 |
paul@267 | 13 | |
paul@267 | 14 | c = C() |
paul@267 | 15 | d = D() |
paul@267 | 16 | |
paul@267 | 17 | # Invoke a method that calls the default version of f. |
paul@267 | 18 | |
paul@267 | 19 | print c.g() # 1 |
paul@267 | 20 | print d.g() # 1 |
paul@267 | 21 | |
paul@267 | 22 | # Replace f in C and invoke the method again. For C, f will have changed, |
paul@267 | 23 | # but for D, f will retain its original value. |
paul@267 | 24 | |
paul@267 | 25 | C.f = f |
paul@267 | 26 | |
paul@267 | 27 | print c.g() # 2 |
paul@267 | 28 | print d.g() # 1 |