Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从不抛出AttributeError或TypeError的Python类_Python_Oop_Python 2.7 - Fatal编程技术网

从不抛出AttributeError或TypeError的Python类

从不抛出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

实现从不抛出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
,以便无论是否指定了记录器,该类仍能正常工作。

可能是这样的吗

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
属性,如果您有检查该属性的代码,该属性的值是合理的(即不是函数)