Это не одно и то же, но разница очевидна только тогда, когда у вас есть свойства / поля с общим типом (который вы можете делать только тогда, когда сам класс является общим) или у вас есть несколько методов:
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>
для методов, когда у вас есть это в классе, поскольку наличие в обоих местах фактически вводит другой общий тип типа для метода, который не зависит от метода для класса ...)
Как это объяснило здесь , если бы array
не реализует __iadd__
, метод, эти b+=(4,)
был бы просто неукомплектованным из b = b + (4,)
, но очевидно это не, таким образом array
действительно реализует __iadd__
метод. По-видимому, реализация __iadd__
метод является чем-то вроде этого:
def __iadd__(self, x):
self.extend(x)
Однако мы знаем, что вышеупомянутый код не является фактической реализацией __iadd__
метод, но мы можем принять и признать, что существует что-то как extend
метод, который принимает tupple
исходные данные.