методы и конструкторы

Немного отличающийся подход для реализации одиночного элемента в Python borg шаблон Alex Martelli (сотрудник Google и гений Python).

class Borg:
    __shared_state = {}
    def __init__(self):
        self.__dict__ = self.__shared_state

Так вместо того, чтобы вынудить все экземпляры иметь те же идентификационные данные, они совместно используют состояние.

12
задан tintincutes 15 July 2009 в 08:56
поделиться

7 ответов

Конструктор работает только тогда, когда вы создаете новый экземпляр класса. Это самый первый метод, запускаемый в экземпляре, он должен выполняться, и он запускается ровно один раз.

Метод экземпляра может быть вызван в любом месте от нуля до бесконечного числа раз для экземпляра после его создания.

Конструктор запускается неявно. Когда создается новый экземпляр класса, он запускается автоматически. Метод запускается явно. Он должен вызываться либо из внешнего источника, либо из метода - или конструктора- в классе.

Конструктор предназначен для использования для соединения. В конструкторе вы не хотите выполнять фактическую работу. Вы в основном готовите класс к использованию. Метод предназначен для выполнения реальной работы.

public class MyType
{
    private SomeType _myNeeds;

    // constructor
    MyType(SomeType iWillNeedThis)
    {
        _myNeeds = iWillNeedThis;
    }

    // method
    public void MyMethod()
    {
        DoSomethingAbout(_myNeeds);
    }
}
22
ответ дан 2 December 2019 в 03:02
поделиться

Конструктор - это метод ... специальный метод, который вызывается при "построении" класса.

Определение : Конструктор - это класс функция-член в C ++ и C #, имеющая то же имя, что и сам класс.

Цель конструктора - инициализировать все переменные-члены, когда создается объект этого класса. Любые приобретенные ресурсы, такие как память или открытые файлы обычно выпускаются в деструкторе класса.

From About.com

15
ответ дан 2 December 2019 в 03:02
поделиться

Конструктор - это метод экземпляра со специальным значением - в частности, он вызывается изнутри при создании экземпляра соответствующего класс с новый . Это ключевое различие.

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

5
ответ дан 2 December 2019 в 03:02
поделиться

Имя метода конструктора совпадает с именем класса. Кроме того, у него нет возвращаемого типа. Или, если хотите, сам метод конструктора не имеет имени, но возвращаемый тип - это тип класса.

public class Foo
{
    // Constructor
    public Foo()
    { }

    public void Bar()
    { }
}
3
ответ дан 2 December 2019 в 03:02
поделиться

С точки зрения то, что им разрешено конструкторы мало чем отличаются от методов. Основное концептуальное различие между методом и конструктором заключается в его назначении.

Конструктор переводит объект в допустимое, пригодное для использования состояние и вызывается только один раз в начале. Метод переводит объект из одного допустимого состояния в другое. (Хорошо, некоторые методы только получают информацию, они не требуются для изменения состояния объекта.)

Изменить: Мне приходит в голову, что, особенно для C #, приведенное выше объяснение может сбивать с толку, поскольку неизменяемые объекты не являются редкостью в языке идиом, поэтому многие объекты, с которыми столкнется OP, не будут иметь изменяемого состояния. Сложные концепции часто имеют однострочные объяснения, простые, элегантные и неправильные.

2
ответ дан 2 December 2019 в 03:02
поделиться

С точки зрения того, как они работают с объектом, они ведут себя аналогично. Конструктор - это метод объекта, но это особый метод.

Что делает его особенным, так это то, как он вызывается извне. Конструктор вызывается как часть процесса создания объекта. Обычные методы вызываются явным образом для объекта (после того, как он был создан).

0
ответ дан 2 December 2019 в 03:02
поделиться

инварианты класса
Класс отвечает за сохранение инвариантов, то есть: класс дает гарантии вызывающей стороне, например " object.weight is никогда не отрицательный ", " в списке имен нет дубликатов " и т. д.

Метод манипулирует существующим объектом, поэтому может полагаться на инварианты класса, гарантированные при входе в метод. Метод должен убедиться, что он преобразует допустимое состояние в другое допустимое состояние.

Конструктор извлекает объект из воздуха, поэтому он должен создать инварианты.

объект существует
Когда конструктор генерирует исключение, предполагается, что объект никогда не существовал. Таким образом, например, финализатор никогда не запустится. В C # последствия сравнительно слабые,

0
ответ дан 2 December 2019 в 03:02
поделиться
Другие вопросы по тегам:

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