2013-07-17 58 views
0

實現永遠不會拋出AttributeError或TypeError的類的最佳方法是什麼?永遠不會拋出AttributeError或TypeError的Python類

的想法是,我有這樣的

class A(): 
    def __init__(self): 
     self.logger = NeverThrowClass() 
    def set_logger(self, logger): 
     self.logger = logger 
    def do_stuff(self) 
     self.logger.info('Stuff is being done.') 
     pass 

每當某一類方法歸類的一類,我們寫的東西到一個日誌文件。但是,如果沒有指定日誌文件,我仍然希望類方法起作用。我意識到只要訪問了self.logger,我就可以捕捉到異常,但我寧願只是將默認的logger屬性設置爲一些神奇的NeverThrowClass(),它將接受被調用的方式,並且禮貌地不做任何操作,並返回None以獲取任何屬性值,以便類仍然可以正常運行,無論是否指定了記錄器。

回答

2

這樣的事情,也許?

class DoNothing(object): 
    def __getattr__(self, name): 
     return lambda *args, **kwargs: None 

基本上,這類響應與接受任何數量的參數,並返回None功能的任何屬性的訪問。

logger = DoNothing() 
logger.info("Stuff is being done") # does nothing 

,因爲它是用__getattr__(),而不是較低級別的__getattribute__(),你可以,如果你想一些非法的東西只是扔在那裏的一些常規屬性。

class LoggerNot(DoNothing): 
    loglevel = 0 

現在你有一個loglevel屬性,有一個合理的值(即不是一個函數),如果你有一些代碼來檢查它。

+0

這是完美的,謝謝@kindall – qwwqwwq

相關問題