Fwd: A typing question

dn PythonList at DancesWithMice.info
Sun Oct 30 18:30:40 EDT 2022


On 30/10/2022 17.48, Paulo da Silva wrote:
> Às 02:32 de 30/10/22, dn escreveu:
>> On 30/10/2022 11.59, Paulo da Silva wrote:
>>>> Solution (below) will not work if the mention of Foos in GLOBALS is 
>>>> a forward-reference. Either move GLOBALS to suit, or surround "Foos" 
>>>> with quotes.
>>> This is the problem for me. So far, without typing, I used to have 
>>> some config and globals classes, mostly to just group definitions an 
>>> make the program more readable. A matter of taste and style.
>>
>> Agreed, a good practice.
> Thank you.
>>
>>
>>> Now, "typing" is breaking this, mostly because of this forward 
>>> reference issue.
>>
>> As a first step, use the quotation-marks to indicate that such will be 
>> defined later in the code:-
>>
>>> class GLOBALS:
>>>     Foos: Optional[Foos]=None 
>>
>> class GLOBALS:
>>      Foos: Optional["Foos"]=None
>>
>>
>> Later, as gather (typing) expertise, can become more sophisticated, 
>> as-and-when...
>>
>>
>>> The funny thing is that if I replace foos by Foos it works because it 
>>> gets known by the initial initialization :-) !
>>
>> Is the objective to write (good) code, or merely to satisfy the 
>> type-checker?
>>
>> Something that is misleading is not going to be appreciated by others 
>> (including the +6-months you), eg
>>
>> a = a + 1   # decrement total
>>
>> Typing is not compulsory, and has been designed so that we can 
>> implement it a bit at a time, eg only one function amongst many 
>> contained by a module - if that's the only code that requires 
>> maintenance/update.
>>
>> Best not to create "technical debt" though!
>>
> The main idea is to eventually catch some, otherwise "hidden", errors 
> and produce better and cleaner code. Documentation is also a must.


Good idea!

All-along typing has been regarded as a tool for dev.aids, eg IDEs like 
PyCharm and tools such as mypy - rather than a (compulsory) component of 
the Python language itself. This means the folk who decide they don't 
like the idea can happily (and safely) ignore it - and continue to write 
code in perfect-Python. Also, that 'old program[me]s' will continue to 
operate, just as well as they ever did, without any reference to the 
typing library/ies at all. So, there is no imposed-cost, or 'pressure' 
to (wait to) upgrade (such as there was with the jump from Python 2 to 
Python 3).


IMHO I'm finding that the auto-checking performed by the IDE is very 
helpful and stops my imagination from outstripping my coding-abilities 
(in the way that my eyes for chocolate cake are bigger than my 
stomach!). I'll go so far as to say that the discipline imposed/flagged 
by typing has been more beneficial, than my flirtation with an 'AI 
assistant' suggesting what I should code next! The assistant rarely 
seems to correctly anticipate my thinking*, whereas typing pulls me up 
when the code falls-short and prevents me from falling flat on my face!

* which may say something unfortunate about my coding/design, or may 
simply show that SODD (Stack Overflow Driven Development - or the GitHub 
equivalent) leaves much to be desired. Hence the gold-plated advice: 
never copy-paste code without understanding it first!


As time goes by, 'The Python Gods' have been introducing more and more 
capability under the typing banner. Which makes the policy as-outlined, 
the sensible (and parallel) course. S/w architecture and coding-quality 
books talk about "The Boy Scout Rule" (leave the camp-site in better 
condition than you found it). Accordingly, when performing 
user-specified updates, while we are 'there', we have the option/ability 
to add typing to a module/class/function - just as we might perform 
other "refactoring" tasks (one 'green-thumb' I know, referred to it as 
'gardening').


Evidently, the OP introduced typing into his/her code-base with the 
likes of List*. Thereafter, added the Optional, er, option. Now, we're 
talking about forward-references. Plus alluding to more recent 
developments (many of which are version-dependent!).

Accordingly, we see another attribute of a gradual-introduction policy - 
the practitioner learning and becoming confident that (s)he has mastered 
basic techniques, before striding onwards to 'the next level'!


* and for the above reason, I wondered, belatedly, if earlier advice to 
'graduate' to "list", might be premature.


PS and on a personal note, this policy is the one I'm following. So, 
given that we-two are on the same track, we must be "correct" - and also 
the best Python programmers in the world!
(pardon me, I seem over-taken by a coughing fit...)

YMMV!
-- 
Regards =dn


More information about the Python-list mailing list