2016-11-06 8 views
-2

Я создал класс «Сотрудник» с двумя способами, как показано ниже. Я знаю, что эти методы экземпляров не могут быть доступны самим классом без создания экземпляров объектов.Как метод экземпляра доступен без создания экземпляра какого-либо объекта?

Но как работает следующий код без какого-либо создания объекта?

>>> class Employee: 
    def __init__(self,name): 
     self.name = name 
    def getName(self): 
     return self.name 

>>> Employee('John Doe').getName()  #how this code is working?? 
'John Doe' 

Я не вижу никаких признаков создания объекта в коде выше. Но это работает, как?

+2

'Сотрудник ('Джон Доу')' создает объект. – Keiwan

ответ

0

Вы do создать экземпляр. Это то, что вызов класса делает, он создает экземпляр:

>>> Employee('John Doe') 
<__main__.Employee instance at 0x1042bab48> 

Вы не должны магазин, который экземпляр, чтобы иметь возможность использовать его в том же выражении. Используя привязку атрибута .getName() и вызов результата части Employee('John Doe'), вы просто цепляете поиск метода и вызываете его в тот же оператор.

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

Сравните вывод из следующих с выше создания экземпляра:

>>> employee = Employee('John Doe') 
>>> employee 
<__main__.Employee instance at 0x1042bac68> 

Единственное отличие состоит в том, что я теперь хранится результат создания экземпляра в переменной с именем employee. Использование этого имени снова приводит к повторному повторению экземпляра.

Для Python то, что нет никакой разницы между использованием Employee('John Doe').getName() и employee.getName(), как смотреть вверх атрибут getName на экземпляре и затем вызвать его.

+0

Таким образом, необязательно назначать переменной (ссылочному имени) экземпляру для использования атрибутов класса. Надеюсь, я понял. –

+0

@PrakashBhattarai: действительно, не требуется хранить экземпляр; если все, что вы хотели сделать, это вызвать один метод, тогда все в порядке. –

 Смежные вопросы

  • Нет связанных вопросов^_^