首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有getter和setter的Python属性

带有getter和setter的Python属性
EN

Stack Overflow用户
提问于 2016-11-19 09:32:13
回答 2查看 93关注 0票数 0

我是Python新手。

我想上一门课叫“详细”。它旨在控制我的新Python程序的打印输出量。

在我的程序运行时,详细的内容应该是恒定的,因此我打算用所需的详细程度初始化详细的对象。让我们将此对象的实例称为“谓词”。

在我的程序运行时,我经常希望检查详细的内容,以便程序知道何时打印输出。因此,我想调用verb.high、verb.low等,然后返回true或false。

下面是一些示例代码(基于我找到的包中的一些代码),但它在我的程序中还不起作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

如果你有更好的方法,我会很高兴听到的。不过,我也会对如何使上述方法有效感兴趣。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-19 09:49:13

请参阅Python内置的日志记录模块.没有必要重新发明轮子。

这是文档中的一个样本:

导入日志logging.warning(‘小心!’)#将打印一条消息到控制台,logging.info(‘我告诉过你’)#不会打印任何东西

如果希望设置日志级别,以便打印INFO +更高优先级的消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
logging.getLogger().setLevel(logging.INFO)

我还建议坚持下面列出的默认日志级别:

票数 0
EN

Stack Overflow用户

发布于 2016-11-19 10:18:42

当我试图按照jonrsharpe的要求创建一个更好的示例代码时,让我感到惊讶的是,我从上面的工作中获得了代码。但我仍然打算使用Python的日志模块..。:-)

问题主要是我如何尝试使用详细的类。下面的代码中现在包含了如何使用它。(我不知道我以前到底做了什么,我经常修改代码.)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40695883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文