Миграция класса, наследующего str и __new__ от py 2 до 2/3 - PullRequest
0 голосов
/ 23 мая 2018

В настоящее время я пытаюсь перенести некоторый код Python 2 в код, совместимый с Python 2/3, и у меня возникают проблемы с этим конкретным классом:

class FileID(str):
    def __new__(cls, fileid, *args):
        return super(FileID, cls).__new__(cls, fileid)

    def __init__(self, fileid, size):
        super(FileID, self).__init__(fileid)
        self.size = size

x = FileID('a', 1)

print(x) # prints: a
print(x.size) # prints: 1

В Python 2.7 это работает просто отлично.

Для переноса я использовал from builtins import super.

Для Python 3.6 я удаляю избыточные внутренние супер-аргументы, но кажется, что оба метода __new__ блокируются,а также при передаче аргумента int (говоря, что это должно быть str).

Есть ли способ создать этот класс как py2 / 3 (наследует str и может принимать аргументы типаint) что эквивалентно?

Заранее спасибо!

1 Ответ

0 голосов
/ 23 мая 2018
class FileID(str):
    def __new__(cls, fileid, *args):
        return super().__new__(cls, fileid)
    def __init__(self, fileid, size):
        super().__init__()
        self.size = size
x = FileID('a', 1)
print(x) # prints: a
print(x.size) # prints: 1

у меня работает как в Python 2, так и в 3

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