git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

i don't understand this python class


On 30/06/20 5:14 AM, joseph pareti wrote:
> I have piece of code with constructs as follows:
> 
> *class* *SentimentNetwork**:*
> 
>      *def* __init__*(*self*,* reviews*,* labels*,* hidden_nodes *=* 10*,*
> learning_rate *=* 0.1*):*
>          np*.*random*.*seed*(*1*)*
>         self*.*init_network*(**len**(*self*.*review_vocab*),*hidden_nodes*,*
> 1*,* learning_rate*)*
> 
>      *def* init_network*(*self*,* input_nodes*,* hidden_nodes*,* output_nodes
> *,* learning_rate*):*
>          # Store the number of nodes in input, hidden, and output layers.
>          self*.*input_nodes *=* input_nodes
>          self*.*hidden_nodes *=* hidden_nodes
>          self*.*output_nodes *=* output_nodes
> 
> which makes me think about the redundant usage of* init_network:*
> 
>     1. as a method, AND
>     2. as a property


Let's imagine this code-functionality, but where all of the 
initialisation is performed in the single __init__ method:-

- there would be four lines of code instead of eight, saving typing-time 
and reading-time
- when reading the code, we would not have to 'jump' our eyes from 
__init__() to init_network, just to see what happens at instantiation

So, why bother?
(is that the nub of your question?)

Consider now the pertinent four lines:

- seed the PRNG (Pseudo-Random Number Generator)
- set number of input_nodes
- set number of hidden_nodes
- set number of output_notes

per my favorite (hi-brown and highly-technical) TV program(me): "which 
of these is not like the others?"

Add to such thinking, that there is apparently much more in the 
initialiser than illustrated (presumably for brevity - thanks!), and you 
can comprehend that there are several *different* functions that all 
have to happen upon instantiation.

So, although init_network() as a separate method is *functionally* 
unnecessary, by separating those tasks from 'everything else that has to 
happen' (and presumably also bunching groups of those tasks together 
under applicable headings!) is a very helpful *documentation* technique 
- in fact, I put it to you, that the name of the method is more helpful 
to a reader, than is the explanatory comment! Your thoughts?

(which #comment 'should' be a docstring, BTW)


The word "property" may have a slightly different definition in Python 
than in other programming languages you have used. If that part of the 
question hasn't been adequately-covered (albeit en-passant) please 
explain further...


Finally, please be aware that there is a Python-Tutor Discussion List 
for the pleasure of both learners and tutors.
-- 
Regards =dn