Movatterモバイル変換


[0]ホーム

URL:


[Python-ideas] Mitigating 'self.' Method Pollution

Steven D'Apranosteve at pearwood.info
Sat Jul 11 19:21:16 CEST 2015


On Sat, Jul 11, 2015 at 08:23:39AM -0700, David Mertz wrote:> You are confusing scoping with attribute access. 'self' is not a lexical> scope. In a way, if you squint just right, it resembles a dynamic scope (or> would under your proposal). But Python isn't elisp, and we don't want to> have dynamic scoping.I believe you are misunderstanding either dynamic scoping or Michael's proposal.In dynamic scoping, the scope of variables depends on the call chain. So if you write:    def spam():        print(x)and then *call* it from function eggs(), spam gets x from the scope of eggs. This is nothing like Michael's proposal.> I.e. you'd like bare variables to be (sometimes) scoped to the namespace of> the instance eventually created somewhere outside of the class definition> (quite likely only created under runtime dependent conditions).self is always an instance created outside of the class definition, under runtime dependent conditions. You are describing every instance of every class. You can't create an instance of class Spam *inside the class definition* of Spam, because the class doesn't exist yet:class Spam:    x = Spam()  # doesn't work> In> contrast, actual Python is far simpler... all variables are lexically local> when defined, unless explicitly declared to have a different and specific> *lexical* scope.That's not correct. If it were, this would fail with NameError or UnboundLocalError:s = "hello world"def func():    print(s)func()-- Steve


More information about the Python-ideasmailing list

[8]ページ先頭

©2009-2026 Movatter.jp