Some futher thoughts: On Thu, Jun 16, 2016 at 10:38:13AM -0500, boB Stepp wrote: > class FTPFiles(FTP, object): > """FTP files to Windows server location(s).""" > > def __init__(self, host=server_ip, user=user, passwd=passwd): > """Initialize FTPFiles object. Normally the defaults will be used.""" > > super(FTPFiles, self).__init__(host, user, passwd) > self.host = host > self.user = user > self.passwd = passwd
Do you actually need to record these? Once they're used to establish a connection and login, what are they for? > def print_welcome_msg(self): > """Print welcome message sent by FTP server.""" > print self.getwelcome() The getwelcome method already prints the message, which is a bad design. But only if debugging is true. So I would approach this in one of two ways: (1) Delegate to the existing getwelcome method: def print_welcome_msg(self): save_flag = self.debugging self.debugging = True try: x = self.getwelcome() # prints the msg finally: self.debugging = save_flag (2) Re-implement the print functionality. def print_welcome_msg(self): print "*welcome*", self.welcome (3) If you really want to be paranoid, use: print "*welcome*", self.sanitize(self.welcome) although I don't think it's likely to make any real difference in practice. (The sanitize method makes a feeble attempt to hide the password.) > if __name__ == '__main__': > ftp = FTPFiles() > ftp.print_welcome_msg() > ftp.quit() This appears to be equivalent to: ftp = FTP(host, user, passwd) ftp.debugging = True x = ftp.getwelcome() ftp.quit() > What I learned today: > > 1) FTP from ftplib appears to be an old-style class. > > 2) I can't just use "class FTPFiles(FTP)" or I will be using old-style > classes. Is this a problem? Old-style classes are good enough for many purposes. > 3) I need to use "class FTPFiles(FTP, object)" to use new-style > classes and "object" must come AFTER "FTP". > > 4) I have to use "super(FTPFiles, self).__init__(host, user, passwd)" > or I cannot successfully inherit from the FTP() class. Also, "self" > apparently must come AFTER "FTPFiles" in the super expression. For old-style classes, don't use super because it doesn't work. Instead just write: FTP.__init__(self, host, user, passwd) That means that you cannot engage in multiple inheritence with new-style classes, but MI is a serious pain to get right, and 99% of the time it is overkill, so you're not missing much. -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor