Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何制定pylint规则以允许以`__`_Python_Oop_Pylint_Information Hiding - Fatal编程技术网

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抱怨,我还没有找到一种优雅的方法来禁用该消息,然而:

  • 我不想每次都取消显示消息
  • 我在
    .pylintrc
    中指定了正则表达式以允许使用下划线,但是不可能非常严格地执行camelCase
  • 我一般不想禁用名称检查
还有别的办法允许这样的名字吗?类似于pylint规则“\uu camelCase”的东西,我可以将其应用于
类属性
?还是另一种“内置”的蟒蛇方式

实际上,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语言本身和其他核心信息的更改。