这个让我挠头。我修好了,但我仍然想知道为什么这会让我发现这个问题。
我有一个受保护的类方法_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。