Почему b + = (4,) работает, а b = b + (4,) не работает, когда b является списком?

Это не одно и то же, но разница очевидна только тогда, когда у вас есть свойства / поля с общим типом (который вы можете делать только тогда, когда сам класс является общим) или у вас есть несколько методов:

public class ArrayWrapper<T> {
    private T[] elements;

    public T get(int index) {
        return elements[index];
    }

    public void set(int index, T value) {
        elements[index] = value;
    }
}

Без <T> в классе поле T[] elements не будет компилироваться, и можно было бы использовать разные типы в get() и set() на одном и том же объекте.

(Как заметил Ли, вы, вероятно, не хотите использовать <T> для методов, когда у вас есть это в классе, поскольку наличие в обоих местах фактически вводит другой общий тип типа для метода, который не зависит от метода для класса ...)

75
задан M.K 7 October 2019 в 13:23
поделиться

1 ответ

Как это объяснило здесь , если бы array не реализует __iadd__, метод, эти b+=(4,) был бы просто неукомплектованным из b = b + (4,), но очевидно это не, таким образом array действительно реализует __iadd__ метод. По-видимому, реализация __iadd__ метод является чем-то вроде этого:

def __iadd__(self, x):
    self.extend(x)

Однако мы знаем, что вышеупомянутый код не является фактической реализацией __iadd__ метод, но мы можем принять и признать, что существует что-то как extend метод, который принимает tupple исходные данные.

1
ответ дан 24 November 2019 в 11:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: