我是Python新手。
我想上一门课叫“详细”。它旨在控制我的新Python程序的打印输出量。
在我的程序运行时,详细的内容应该是恒定的,因此我打算用所需的详细程度初始化详细的对象。让我们将此对象的实例称为“谓词”。
在我的程序运行时,我经常希望检查详细的内容,以便程序知道何时打印输出。因此,我想调用verb.high、verb.low等,然后返回true或false。
下面是一些示例代码(基于我找到的包中的一些代码),但它在我的程序中还不起作用:
VERB_QUIET = 0
VERB_LOW = 1
VERB_MEDIUM = 2
VERB_HIGH = 3
VERB_DEBUG = 4
class Verbosity(object):
"""Class used to determine what to print to standard output.
Attributes:
level: Determines what level of output to print.
"""
value = "low"
def __init__(self, new_value="low"):
self.level = new_value
def __getattr__(self, name):
"""Determines whether a certain verbosity level is
less than or greater than the stored value.
Args:
name: The verbosity level at which the info/warning string
will be output.
"""
if name is "quiet":
return self.level >= VERB_QUIET
elif name is "low":
return self.level >= VERB_LOW
elif name is "medium":
return self.level >= VERB_MEDIUM
elif name is "high":
return self.level >= VERB_HIGH
elif name is "debug":
return self.level >= VERB_DEBUG
def __setattr__(self, name, value):
"""Sets the verbosity level
Args:
name: The name of what to set. Should always be 'level'.
value: The value to set the verbosity to.
Raises:
ValueError: Raised if either the name or the level is not
a valid option.
"""
if name == "level":
if value == "quiet":
level = VERB_QUIET
elif value == "low":
level = VERB_LOW
elif value == "medium":
level = VERB_MEDIUM
elif value == "high":
level = VERB_HIGH
elif value == "debug":
level = VERB_DEBUG
else:
raise ValueError("Invalid verbosity level " + str(value) + " specified.")
super(Verbosity, self).__setattr__("level", level)
如果你有更好的方法,我会很高兴听到的。不过,我也会对如何使上述方法有效感兴趣。
发布于 2016-11-19 09:49:13
请参阅Python内置的日志记录模块.没有必要重新发明轮子。
这是文档中的一个样本:
导入日志logging.warning(‘小心!’)#将打印一条消息到控制台,logging.info(‘我告诉过你’)#不会打印任何东西
如果希望设置日志级别,以便打印INFO +更高优先级的消息:
logging.getLogger().setLevel(logging.INFO)
我还建议坚持下面列出的默认日志级别:
发布于 2016-11-19 10:18:42
当我试图按照jonrsharpe的要求创建一个更好的示例代码时,让我感到惊讶的是,我从上面的工作中获得了代码。但我仍然打算使用Python的日志模块..。:-)
问题主要是我如何尝试使用详细的类。下面的代码中现在包含了如何使用它。(我不知道我以前到底做了什么,我经常修改代码.)
class Simulation(object):
def __init__(self, verbosity_level="low"):
self.verbosity = Verbosity(verbosity_level)
VERB_QUIET = 0
VERB_LOW = 1
VERB_MEDIUM = 2
VERB_HIGH = 3
VERB_DEBUG = 4
class Verbosity(object):
value = "low"
def __init__(self, verbosity_level="low"):
self.level = verbosity_level
def __getattr__(self, name):
if name == "quiet":
return self.level >= VERB_QUIET
elif name == "low":
return self.level >= VERB_LOW
elif name == "medium":
return self.level >= VERB_MEDIUM
elif name == "high":
return self.level >= VERB_HIGH
elif name == "debug":
return self.level >= VERB_DEBUG
def __setattr__(self, name, value):
if name == "level":
if value == "quiet":
level = VERB_QUIET
elif value == "low":
level = VERB_LOW
elif value == "medium":
level = VERB_MEDIUM
elif value == "high":
level = VERB_HIGH
elif value == "debug":
level = VERB_DEBUG
else:
raise ValueError("Invalid verbosity level " + str(value) + " specified.")
super(Verbosity, self).__setattr__("level", level)
sim = Simulation(verbosity_level = "medium");
if sim.verbosity.high:
print "Simulation is starting"
https://stackoverflow.com/questions/40695883
复制相似问题