On Wed, 2 Dec 2020 21:15:22 +1100 Steven D'Aprano firstname.lastname@example.org wrote:
[First part was answered previously.]
Is monkey-patching disallowed because `mod.func1` is defined as a constant?
What "disallowed" do you mean? The example above clearly says "Leads to a warning". At "run-time" (i.e. eventually, after you've done the monkey-patching), it's disallowed, yes.
What disallowed do I mean? Exactly the same disallowed you just agreed with.
What's allowed and what's disallowed depends on whether a program just "loads" or "actually starts to run". While it loads, it can do all the tricks Python can do now. When it starts to run, then the actual "strict" restrictions are applied. That's the crucial part of the proposal, required to understand other aspects of the proposal.
Or are all functions automatically considered to be constants?
That's the case, right.
Okay, so all functions are automatically constants.
Yes, that's the whole idea.
Occasionally I find that decorator syntax is not sufficient, and I've used the explicit "define-decorate-replace" form. That won't work either.
You'll get a warning, and if you're smarter than the strict mode in that case, you can disable it (in the same sense that you can disable any warning in Python).
So "strict mode" isn't actually strict, it's just a built-in linter.
It's strict. And it has many (more than one for sure) uses. One of the uses is to improve code structure (or understanding of it) of the existing codebases.