[Tutor] Py 2.4.4: Inheriting from ftplib.FTP()

boB Stepp robertvstepp at gmail.com
Fri Jun 17 11:41:43 EDT 2016


On Thu, Jun 16, 2016 at 11:40 AM, Alan Gauld via Tutor <tutor at python.org> wrote:
> On 16/06/16 16:38, boB Stepp wrote:
>
>> class FTPFiles(FTP, object):
>>     """FTP files to Windows server location(s)."""
>
> OK, First comment. You describe this as an action(verb)
> rather than a noun. Classes should represent nouns
> (objects) not actions. FTP represents a protocol
> connection with which you can do things (one of
> which is put/get files) you class should be the same.
> (Remember inheritance m,eans you are imp0lementing
> an "is a" relationship. So FTPFiles is an FTP...or
> should be.)

I was struggling to come up with a good name here that would not cause
me any name collision issues with the contents of ftplib.FTP().  I
have for the moment changed the class name to "CustomFTP", which
bothers me for some reason that I cannot put my finger on.  However,
this looks to become a non-issue; see below.

>> 4)  As this class stuff is mostly treading new ground for me, am I
>> doing anything that I should not be doing or should do in a more
>> preferred way?  Keep in mind that I am just starting on this code
>> today.
>
> I'll leave someone with more ftplib experience to answer the other
> points but the question I'd ask is what are you planning to add to FTP?
> Creating a new class by inheritance implies that you are going to be
> extending (or specializing) its capabilities in some way. What are you
> planning to extend/specialize? For example are you going to limit it to
> manipulating files only? ie prevent listing directories say?

My first objective was just to play around with inheritance as a
learning opportunity.  Now that I have gotten it to work and have
somewhat a feel for the possibilities, I am actually going to abandon
it for this specific project.  I think I can use the FTP class
unmodified and just write appropriate helper functions to get the
specifics of what I want, passing my specific FTP instance object to
these functions.

> You need to know what you are changing to warrant using inheritance.
> Inheritance is a powerful tool but it carries lots of potential for
> problems too, especially if you plan on mixing your new class in with
> the old one (or sharing it with others who will) - you need to be
> careful to abide by the Liskov substitution principle (LSP).

I looked up LSP last night.  I can see how I can easily get burned
even on something seemingly simple.  One example, which I imagine is
often used, is of a square class inheriting from a rectangle class.
Squares have same sized sides; rectangles not necessarily so.  So any
size changing methods from the rectangle class inherited by the square
class can potentially wreak havoc on squares.  Am I getting the
essence of the potential issues I might encounter?

boB


More information about the Tutor mailing list