ложный положительный результат для суперкласса __init__ - PullRequest
2 голосов
/ 29 июля 2009

Если я получаю класс из ctypes.BigEndianStructure, Pylint предупреждает, если я не позвоню BigEndianStructure.__init__(). Отлично, но если я исправлю свой код, Pylint все равно предупредит:

import ctypes

class Foo(ctypes.BigEndianStructure):
    def __init__(self):
        ctypes.BigEndianStructure.__init__(self)

$ pylint mymodule.py
C:  1: Missing docstring
C:  3:Foo: Missing docstring
W:  4:Foo.__init__: __init__ method from base class 'Structure' is not called
W:  4:Foo.__init__: __init__ method from base class 'BigEndianStructure' is not called
R:  3:Foo: Too few public methods (0/2)

Сначала я подумал, что это потому, что Structure происходит из модуля C. Я не получаю предупреждение, если подкласс от одного из моих классов или, скажем, SocketServer.BaseServer, который является чистым Python. Но я также не получаю предупреждение, если я подкласс от smbus.SMBus, который находится в модуле C.

Кто-нибудь знает обходной путь, кроме отключения W0231?

1 Ответ

6 голосов
/ 29 июля 2009

Попробуйте использовать звонки в новом стиле super:

class Foo(ctypes.BigEndianStructure):
    def __init__(self):
        super(Foo, self).__init__()
...