to be pythonic: should caller or callee log?

Xaxa Urtiz urtizvereaxaxa at gmail.com
Wed Sep 4 08:14:24 EDT 2013


Le mercredi 4 septembre 2013 09:44:27 UTC+2, Gildor Oronar a écrit :
> Thanks:
> 
> 
> 
> El 04/09/13 05:01, Terry Reedy escribió:
> 
> 
> 
> > I would expect that every account class has a transaction method.
> 
> > * If so, just call it, but
> 
> > assertIsNot(DebitAccount.transaction, AbstractAccount.transaction)
> 
> > for every subclass in your test suite.
> 
> > * If not, perhaps you need an abstract subclass TransAccount. Then use
> 
> > hasattr in production code and the isnot test in test code.
> 
> 
> 
> I would assume that you categorize this as a unit test problem, because 
> 
> you consider an Acount not implementing Transaction is a bug, right?
> 
> 
> 
> There are two occassions an account is intended not having Transaction 
> 
> function, both not test-related:
> 
> 
> 
> 1. The acount doesn't offer this feature. e.g. Certificate of Deposit. 
> 
> This can be in TransAccount.
> 
> 
> 
> 2. The 3rd-party account offer this feature but doesn't qualify the 
> 
> software's requirement, e.g. not returning the result in 3 seconds, and 
> 
> is avoided when planning the deal (I am writing an auto-trade software). 
> 
> This case you cannot categorize those who can into TransAccount, 
> 
> beacause 1) that naming imply other accounts don't do transaction but 
> 
> they do, just not good enough; 2) when other accounts becomes good 
> 
> enough, the change (to inheritance) is a bit too invasive.

Hello,
and what about something like that :


class AbsctractAccount():
     def transaction(self, amount, target):
         logging.info("Start transaction of %s to %s" % (amount, target))
         self.DoTransaction(amount,target)

     def DoTransaction(self,amount,target):
         pass # or raise notimplemented or do not implement this methods in the abstract class
         ...

class DebitAccount(AbstractAccount):
     def DoTransaction(self, amount, target):
         ...

class SomeOtherAccount(...)
     .... 
like that you only have to write the logging function once.



More information about the Python-list mailing list