从不抛出AttributeError或TypeError的Python类
实现从不抛出AttributeError或TypeError的类的最佳方法是什么 我的想法是我有一个这样的班级从不抛出AttributeError或TypeError的Python类,python,oop,python-2.7,Python,Oop,Python 2.7,实现从不抛出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 i
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
,以便无论是否指定了记录器,该类仍能正常工作。可能是这样的吗
class DoNothing(object):
def __getattr__(self, name):
return lambda *args, **kwargs: None
基本上,该类使用一个函数响应任何属性访问,该函数接受任意数量的参数并返回None
logger = DoNothing()
logger.info("Stuff is being done") # does nothing
由于它使用的是\uuuuGetAttr\uuuuuuuuuuuuuuuuuuuuuuuuuu()
而不是较低级别的\uuuuuuuuuuuuuuGetAttribute()
,如果需要一些非方法的东西,您可以在那里抛出一些常规属性
class LoggerNot(DoNothing):
loglevel = 0
现在您有了一个loglevel
属性,如果您有检查该属性的代码,该属性的值是合理的(即不是函数)