Есть способы, но ни один из них не является хорошим.
Это не настраивается: вы можете проверить код в pylint design_analysis.MisdesignChecker в def leave_class
:
for method in node.methods():
if not method.name.startswith('_'):
nb_public_methods += 1
Приведенный выше код просто перебирает все методы, не начинающиеся с "_", и считает их общедоступными.
Следовательно, я вижу два способа сделать то, что вы хотите сделать:
1) разветвите pylint и измените этот метод:
for method in node.methods():
if not method.name.startswith('_') and method.parent == node:
nb_public_methods += 1
method.parent
- узел класса, в котором определена эта функция; также в вашей функции leave_class
у вас есть параметр node
, который является узлом класса.
Сравнивая их, можно понять, текущий это класс или нет.
2) отключите это правило в конфиге pylint и создайте свой собственный плагин:
MAX_NUMBER_PUBLIC_METHODS = 3
class PublicMethodsChecker(BaseChecker):
__implements__ = (IASTNGChecker,)
name = 'custom-public-methods-checker'
msgs = {
"C1002": ('Too many public methods (%s/%s)',
'Used when class has too many public methods, try to reduce \
this to get a more simple (and so easier to use) class.'),
}
def leave_class(self, node):
"""check number of public methods"""
nb_public_methods = 0
print type(node)
for method in node.methods():
if not method.name.startswith('_') and method.parent == node:
nb_public_methods += 1
if nb_public_methods > MAX_NUMBER_PUBLIC_METHODS:
self.add_message('C1002',
node=node,
args=(nb_public_methods, MAX_NUMBER_PUBLIC_METHODS))
в основном эта реализация представляет собой слегка измененную выдержку из design_analysis.MisdesignChecker из исходного кода pylint.
Дополнительные сведения о подключаемых модулях: http://www.logilab.org/blogentry/78354, а также в исходном коде pylint. .
person
RomanI
schedule
18.01.2013