我的代码中有这一部分:
class CSVFile():
# Keys in kwargs that are not allowed
__black_list = ()
def __init__(self, **kwargs):
for (k, v) in kwargs.iteritems():
if k in self.__class__.__black_list:
LOG.error("%s is not allowed ", k)
setattr(self, k, v)
正如您所看到的,我将key=>value
对分配为实例变量。稍后在代码中我使用了我在这里设置的变量(例如self.dest
)。
当我用pylint
检查时,它会抱怨:
E: 54,32:CSVFile.upload_file_to_s3: Instance of 'CSVFile' has no 'dest' member
显然,如果我在self.dest
方法中定义__init__
,那么这个错误就会消失。
所以问题是:从PEP8的角度来看,这段代码看起来是“糟糕的”吗?
答案 0 :(得分:4)
与您的代码相关,我看到的唯一潜在违规行为是**kwargs
格式化您的键值。 只要** kwargs元素跟随PEP 8 variable naming conventions(all_lowercase_words_separted_by_underscores)就可以了。
PyLint向你抱怨的原因是它不能告诉CSVFile对象将具有dest
属性(或者因为它们是动态附加的任何其他属性)。
总体问题是PyLint会进行PEP8检查,但它也会做其他事情。此消息是“其他内容”的一部分。
干杯。
答案 1 :(得分:3)
你在做什么并没有错。
请记住,pylint是一种工具(也是一种很棒的工具),但肯定不是目标。
您应该继续使用pylint,但有时它会变得很麻烦,您可以自定义要运行的检查。在这种情况下,您要禁用该特定检查。
查看this question的答案,其中解释了如何自定义它。