从classmethod

时间:2017-03-24 15:55:09

标签: python-3.x class class-method

这个让我挠头。我修好了,但我仍然想知道为什么这会让我发现这个问题。

我有一个受保护的类方法_parse_string,我想为它实现日志记录。原因是我希望调试信息可用,如果出现问题并且用户想知道他们传递给方法的内容。我在类中设置了一个受保护的成员来引用记录器(因为我不希望我的库的用户触摸记录器对象 - 只有我的类应该这样做。

class myClass:
    myClass._logger = logging.getLogger(__name__)

    @classmethod
    def _parse_string(cls, raw_string: str) -> str
        cls._logger.info('Call to _parse_string method.')
        cls._logger.debug('_parse_string input: {0}'.format(raw_string))
        return raw_string.rstrip()

在阅读cls._logger.info('Call to _parse_string method.') cls._logger.debug('_parse_string input: {0}'.format(raw_string))的第5行和第6行代码中,它向我发出警告,表示我正在访问受保护的成员。

但我正在myClass类中的@classmethod访问所说的'protected'成员,为什么要警告?

我发现解决方案是:

class myClass:
    myClass._logger = logging.getLogger(__name__)

    def _parse_string(self, raw_string: str) -> str
        self._logger.info('Call to _parse_string method.')
        self._logger.debug('_parse_string input: {0}'.format(raw_string))
        return raw_string.rstrip()

只需移除@classmethod装饰器并将cls引用更改为self。

0 个答案:

没有答案