Кажется, вы упрощаете непростую вещь. В объектно-ориентированном программировании класс представляет собой декларативную конструкцию, которая дает представление о том, какой объект (проявление этого плана) будет содержать (свойства) и как он будет вести себя (участников). Каждое проявление такого класса называется объектом, который имеет определенный и конкретный экземпляр. Из объекта через любой из этих поведенческих атрибутов, называемых функциями-членами/методами, нам нужно каким-то образом ссылаться на этот экземпляр объекта и запоминать отдельные элементы внутри него и делать четкое различие с другими нечленными объектами.
Рассмотрим Ваш пример
class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print 'Hello, my name is', self.name
Каждый экземпляр этого человека (Том, Дик, Гарри) уникален и в каждом случае, чтобы вернуться к себе нам нужно некоторое идиомы, как (я в Python, это PTR это C++ или это в Java).
Таким образом, в методе __init__
, когда вам нужно разграничить между атрибутом name
лица с параметром name
мы можем легко сделать это с self
. Не только это, в любом случае, мы можем продолжать ссылаться на это имя через self
.
Создание экземпляра Person p=Person('Swaroop')
и затем, вызывая SayHi контрастным называть просто функцию SayHi которая не является частью объекта имеет два значения
- Функция преходяща, не имеет никакого состояния, нет экземпляра и это похоже на «Говорить этому парню». Эй, мистер, который когда-либо говорил «Привет, меня зовут Свароп». Это похоже на каждый ход, который вы должны сделать, чтобы глупость осознала его имя, которое забудет в следующий момент, когда вы встретитесь с ним. Это похоже на то, что Гай страдает от Anterograde_amnesia. Вызов
sayHi
экземпляра Person с именем Swaroop с другой стороны означал бы что-то вроде физически существующего Swaroop-приветствия обратно его Имя, у которого есть постоянная память, и никогда не забудет, если он не примет новое имя.
- Функция никогда не запоминается, но забывает каждый раз, когда вызов заканчивается. Объект Person будет помнить имя до тех пор, пока вы явно или неявно не убьете этого человека.
Если у вас есть фон C++ и может быть интересно, почему на земле нам нужно добавить этот дополнительный параметр в вызов функции, где, как и в C++, этот указатель никогда не передается. Хорошо, Кандидат говорит. Если вы читаете соглашение о вызове C++, будь то X86 или X64, этот указатель передается через регистр ecx
методу, чтобы дать дескриптор самому себе. Здесь яснее здесь, где мы намеренно передаем дескриптор текущему экземпляру методу.
Вы пытались выполнить свой второй фрагмент? Само по себе? – quamrana
Определяет, что ваш второй фрагмент кода имеет неправильный отступ. –
Я не думаю, что это действительно вопрос о «себе», это вопрос о ООП и классах. –