ссылка на текущий инстанс класса очевидно. кстати, self это лишь общепринятое имя, насколько я знаю, при желании можно обозвать его как хочешь (не помню, есть это в pep8 или нет)
Когда ты вызываешь obj.method(), на самом деле вызывается cls.method(obj). Т.е. ссылка на экземпляр класса передается методу класса всегда (кроме спец. методов). Находясь внутри метода класса ты можешь обратиться к этому объекту через self и вызвать, например, другой метод этого объекта.
Если не понятно в документации - почитай про this в Java.
Это галимое сишное ООП типа GTK. В С++ объект и его методы всегда знают себя. В Си - нет. В Си есть только функция, которой нужно передать объект над которым производится действие (читай вызов метода), и список аргументов для метода.
C++:
widget->setWindoTitle("C++");
C:
gtk_window_set_title(GTK_WINDOW(window), "C or Python");
В Си также нету ограничений доступа private/protected. Классы в Питоне копируют Си со всеми этими тупостями, но не смотря на это, это всё равно ООП. Привыкай.
Мы вывели информацию об объекте класса, а также посмотрели список доступных атрибутов. Если ты будешь добавлять методы в определение объекта класса (вместо pass), то они тоже будут появляться в выводе dir(A). Но и без этого, как видишь, атрибутов хватает. Можно поговорить про них подробнее, но позже.
Теперь, что мы можем делать с этим объектом класса? В первую очередь — создавать экземпляры. Именно это и происходит в строчке a = A(). Экземпляр класса (у нас это a) будет использоваться в качестве self, если мы добавим в определение объекта класса какие-нибудь методы.
Расскажу, если спросит. Но в данный момент он спросил «в чём разница между объектом и экземпляром класса?».
Каким бы он ни был новичком, есть устоявшаяся терминология, и нельзя говорить, что «это одно и то же, просто разными словами». Это не просто разные слова, это именно разные понятия, которые составляют основу python.
Далее напишем пример с использованием понятий «объект класса» и «экземпляр класса».
Создадим простейшую «фабрику», которая будет принимать объект класса, и возвращать 4 экземпляра этого класса.
>>> for x in factory(int): print(x)
...
0
0
0
0
>>> for x in factory(float): print(x)
...
0.0
0.0
0.0
0.0
Как видишь, в factory мы передали два различных объекта класса (int и str) и получили по четыре экземпляра этих классов. Экземпляры получились одинаковые, легко понять почему. Мы можем это изменить, написав класс, который моделирует случайное число.
import random
class random_number:
def __init__(self):
self.var = random.randint(0, 100)
def __str__(self):
return str(self.var)
Передадим объект этого класса в нашу фабрику и получим четыре уже различных экземпляра
>>> for x in factory(random_number): print(x)
...
97
20
4
86
Именно в детском саду и нужно проходить понятия «объект класса» и «экземпляр класса», и разницу между ними. На минуточку, это всего лишь 82-ая (из 454) страница классической книги «Язык программирования Python» за авторством сам догадываешься кого. Это основы, это база, это азы.
нельзя говорить, что «это одно и то же, просто разными словами»
У всех нормальных людей это одно и тоже. Чтобы не путаться что такое «объект класса», то по отношению к классу в виде объекта говорят «метаобъект (класса)». А когда говорят просто «объект класса Х» всегда подразумевается именно экземпляр (инстанс) класса X.
Чтобы не путаться что такое «объект класса», то по отношению к классу в виде объекта говорят «метаобъект (класса)»
Понятия метаобъект не существует.
А когда говорят просто «объект класса Х» всегда подразумевается именно экземпляр (инстанс) класса X.
Нет, нет, и ещё раз нет. Открывай «Язык программирования Python» и читай 9-ую главу. Это относится ко всем, у кого будут вопрос к терминологии данной ветки обсуждения.
Открывай «Язык программирования Python» и читай 9-ую главу
Перед тем как тыкать книжкой нужно сначала подучить язык, на котором она написана. Только больной на голову человек может брать терминологию, которую придумал переводчик. В английском есть «class object» и это ни разу не «объект класса» (который object of class), а «классовый объект».
Кстати, плюсую. Все книги по Питону (которые я видел) начинают почему-то с работы со строками, числами, и с прочих мелочей. По-моему, надо сразу начинать с ООП, а всё остальное затрагивать мимоходом.
Перед тем как тыкать книжкой нужно сначала подучить язык, на котором она написана.
В первую очередь тебе (см. далее)
Только больной на голову человек может брать терминологию, которую придумал переводчик.
Тем не менее, именно эта термилогия и принята у питонистов.
В английском есть «class object» и это ни разу не «объект класса» (который object of class), а «классовый объект».
Термины «class object» и «object of class» полностью эквивалентны синтаксически, поскольку и там и там это притяжательный падеж. Если бы ты хоть немного знал английский, то был бы в курсе.