ложный положительный результат для суперкласса __init__

StackOverflow https://stackoverflow.com/questions/1201094

  •  05-07-2019
  •  | 
  •  

Вопрос

Если я получаю класс из 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?

Это было полезно?

Решение

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

class Foo(ctypes.BigEndianStructure):
    def __init__(self):
        super(Foo, self).__init__()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top