On 12/07/20 10:10 PM, Barry Scott wrote:
On 12 Jul 2020, at 00:15, DL Neil via Python-list <python-list@python.org <mailto:python-list@python.org>> wrote:

That does not necessarily mean that the function needs to know
the particular representation or form of that data.   Let those be
objects with getter methods for the data you wish, and have the
function document what methods it will attempt to call.   Then
any class that provides the expected methods would be suitable.

+1

Here, the proposal is not to pass an object per-se, but to pass a function/method ("getter method") which will deliver the requisite data-items?

So, might we then find that our mailing-label routine includes something like (copy-pasting is NOT proper Python!):

def mail_label( getter ):
   ...
   ( first name, middle initial, last name, house number, street name,
   apartment number, town, state, country, zip code ) = getter()

In which case, have we not moved the "very long list" from the function def to a later line within the routine - and how is this in some way 'better'?


This is not the refactor that Roger's excellent rule-of-thumb implies.

Clearly moving the 20 positional args into a tuple is basically the same code,
and the same maintenance problem.

Agreed!


I'd expect to see something like this:

def mail_label( person, address ):
first_name = person.first_name
# or if you want a function interface
first_line_of_address = address.get_first_line()

Does this idea move whole objects across the interface? (see earlier in the thread) Taking a person class as subject and a mailing-label as the function's object, aren't there two criticisms?

1 the function needs to know which attributes of the person and address objects it wants to use, cf saying 'I need street, number, town, ...'*

2 "person" likely contains a load of data that is irrelevant to printing a mail-label.

Why is this preferable to using a 'getter' method, or some other approach?

* your point (above) being that these need not be (say) a dozen data elements, but could be just-enough data, and data-combinations which identify the addressee and which represent the components of the address.
--
Regards =dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to