Python с тем же именем класса в том же файле? - PullRequest
0 голосов
/ 14 марта 2020

Я новичок в Python, и просто использовал какой-то код от других, который действительно меня запутал. Он использует одно и то же имя класса в одном файле, как показано ниже:

class _LSA_UNICODE_STRING(ctypes.Structure):
    _fields_ = [
        ("Length", USHORT),
        ("MaximumLength", USHORT),
        ("Buffer", DWORD),
    ]

INITIAL_LSA_UNICODE_STRING = _LSA_UNICODE_STRING

class _LSA_UNICODE_STRING(INITIAL_LSA_UNICODE_STRING):
    @property
    def str(self):
        if not self.Length:
            return ""
        if getattr(self, "_target", None) is not None:
            raw_data = self._target.read_memory(self.Buffer, self.Length)
            return raw_data.decode("utf16")
        size = self.Length // 2
        return (ctypes.c_wchar * size).from_address(self.Buffer)[:]

    def __repr__(self):
        return """<{0} "{1}" at {2}>""".format(
            type(self).__name__, self.str, hex(id(self))
        )

    def __sprint__(self):
        try:
            return self.__repr__()
        except TypeError as e:
            return """<{0} len={1} maxlen={2} buffer={3}>""".format(
                type(self).__name__, self.Length, self.MaximumLength, self.Buffer
            )

Я пытался удалить подчеркивание _ перед именем класса, pylint пожаловался class already defined, но это может сработать. Однако если с _, pylint не будет жаловаться, то это похоже на ошибку pylint или _ имеет какое-то особое значение в Python?

В части использования это выглядит так :

handle_type = _LSA_UNICODE_STRING.from_buffer_copy(ctypes.c_buffer(512)).str

Поскольку первый _LSA_UNICODE_STRING имеет параметр ctypes.Structure, кажется, что from_buffer_copy взят из ctypes, тогда возвращаемый результат должен быть первым _LSA_UNICODE_STRING, но это с последующим методом .str, который находится во втором определении _LSA_UNICODE_STRING, как это могло произойти? Есть ли профессиональное название для этого вида наследования и перегрузки в Python? Я много искал, но не могу найти хорошего объяснения. Извините за мое невежество и желаю вашей профессиональной помощи. Спасибо!

Оригинальный код от здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...