实现从不抛出AttributeError或TypeError的类的最佳方法是什么?
我的想法是我有一个这样的课程
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
,以便无论是否指定了记录器,该类仍然可以正常运行。
答案 0 :(得分: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
属性具有合理的值(即不是函数),如果你有代码检查它。