Разделение на подклассы кортежа с несколькими __ init __ аргументы

Существует на самом деле класс Стека: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Stack.html

, Если Вы не хотите использовать это, класс LinkedList ( http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedList.html ) имеет addFirst и addLast и removeFirst и removeLast методы, делая его идеально подходящим для использования в качестве класса очереди или стека.

49
задан martineau 17 February 2019 в 06:48
поделиться

1 ответ

Поскольку кортежи неизменяемы, вы должны вместо этого переопределить __ new __ :

python docs

object .__ new __ (cls [, ...] )

Вызывается для создания нового экземпляра класс cls . __ new __ () - статический метод (в специальном корпусе, поэтому вам не нужно объявить это как таковое), который принимает класс, экземпляр которого был запрашивается в качестве первого аргумента. В оставшиеся аргументы - те, которые были переданы к выражению конструктора объекта (звонок в класс). Возврат значение __ new __ () должно быть новым экземпляр объекта (обычно экземпляр of cls ).

Типичные реализации создают новый экземпляр класса, вызвав метод суперкласса __ new __ () с использованием super (currentclass, cls) .__ new __ (cls [, ...]) с соответствующими аргументами и затем изменяя вновь созданный экземпляр по мере необходимости перед возвратом это.

Если __ new __ () возвращает экземпляр cls , затем новый экземпляр __ init __ () метод будет вызываться как __ init __ (self [, ...]) , где self - это новый экземпляр, а оставшиеся аргументы такие же, как были переданы в __ new __ () .

Если __ new __ () не возвращает экземпляр cls , затем новый метод экземпляра __ init __ () не будет

__ new __ () предназначен в основном для разрешения подклассов неизменяемых типов (например, int , str или кортеж ) для настройки создание экземпляра. Также обычно переопределено в пользовательских метаклассах в чтобы настроить создание класса.

67
ответ дан 7 November 2019 в 11:30
поделиться
Другие вопросы по тегам:

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