Python 如何制定pylint规则以允许以`__`
基本上,我有一个带有私有变量的类:Python 如何制定pylint规则以允许以`__`,python,oop,pylint,information-hiding,Python,Oop,Pylint,Information Hiding,基本上,我有一个带有私有变量的类: class-MyClass: 定义初始(自我,abAb): self.\uu abAb=abAb 现在,派林抱怨说: Attribute name "__abAb" doesn't conform to camelCase naming style Python并不真正了解私有变量,但据我所知,它可以通过在两个下划线前加上前缀来实现。但是,现在我遇到了问题,pylint抱怨,我还没有找到一种优雅的方法来禁用该消息,然而: 我不想每次都
class-MyClass:
定义初始(自我,abAb):
self.\uu abAb=abAb
现在,派林抱怨说:
Attribute name "__abAb" doesn't conform to camelCase naming style
Python并不真正了解私有变量,但据我所知,它可以通过在两个下划线前加上前缀来实现。但是,现在我遇到了问题,pylint抱怨,我还没有找到一种优雅的方法来禁用该消息,然而:
- 我不想每次都取消显示消息
- 我在
中指定了正则表达式以允许使用下划线,但是不可能非常严格地执行camelCase.pylintrc
- 我一般不想禁用名称检查
类属性
?还是另一种“内置”的蟒蛇方式
实际上,pylint在更改为snake\u case
命名约定后不再抱怨:
class-MyClass:
定义初始值(self,ab):
self.\uuu ab\u ab=ab\u ab
这有点奇怪,但这就是我想要的。因此,我将使用snake\u case
为属性和方法命名
编辑:从
camelCase
更改为snake\u case
实际上解决了pylint的问题。除了常量之外,下划线不是camelCase的一部分,因此没有很好的内置方法来实现这一点。也就是说,您可以使用模式.[a-z]+[a-Z0-9]+
添加到.pylintrc
,但这将混合命名样式,因此如果可以避免的话,可能不是您想要采取的方法
理想情况下,对于python,您将根据官方首选的命名样式来使用,而不是使用类名
请记住,命名约定只是约定,而且大多是主观的,您的代码仍然有效,它只会发出一种不好的“气味”。对于库和API,使用非常规命名约定可能会降低潜在用户集成代码的可能性,因此,它实际上可能对项目的成功有害。双下划线表示名称损坏,而不仅仅是一种约定,因此将
attr rgx
设置为(uu;)?[a-z]+[a-Z0-9]+
是可以理解的,如果奇怪的话……我同意@sabik的说法,开始时的下划线只是可选的。无论如何,这并没有改变它不够强壮,这就是我最初的意思。也许我的问题应该是对python(“向语言添加信息隐藏”)和pylint(“支持信息隐藏”)的功能请求。对我来说,这是OOP的一个核心特性,因为我想保护用户对intern变量所做的更改,这些更改在外部是未知的,这可能会导致混乱。对我来说,这比强制使用命名风格重要得多。没错,这与python的哲学背道而驰。可以隐藏信息(例如在闭包中),但这不是pythonic方法。它也不太可能在语言中更改。snake_案例实际上解决了以一个或两个下划线开头的属性的pylint消息。如果你能在这之前提一下,我会很高兴的。我的目标不是真的坚持camelCase,我只是从它开始,不知道这不是“标准”。当我运行派林时,我发现了。然后我重新配置它来检查camelCase。然而,最后我还是很恼火,为什么一种如此流行的语言不能很好地支持信息隐藏,而linter却在抱怨名字的风格,如果他试图用一种或多或少蹩脚的方式来隐藏信息的话。你的问题中有一个矛盾,那就是你要求的是“pythonic”实现非pythonic命名约定的方法…@sabik:不,我想问的是如何使内部私有化,而不让pylint抱怨命名风格。也许答案是,python的方式是公开,而不是私下。我承认这并不令人满意。python的方法是使用snake_大小写作为属性名…@sabik:我想知道命名风格如何强烈地属于一种语言。没关系,我会坚持用蛇壳,如果它能救我一些其他的东西的话,那就是它的一部分;PEP8是同一系列文档的一部分,这些文档用于发布过去20年对Python语言本身和其他核心信息的更改。