1

(31 відповідей, залишених у Python)

koala написав:

Мені дуже кортить спитати: що, в книжках продовжується піздньорадянська традиція, коли текст книжки український, але коментарі і повідомлення в коді російські? А ви, відповідно, просто повторюєте? Чи це у вас випадково так вийшло?

Я приклад брав з російськомовного сайту і забув переправити, тому так і вийшло

2

(31 відповідей, залишених у Python)

P.Y. написав:
>>> class C:
...  def __init__(self): self.a1='a' #a1 — атрибут об'єкта
...
>>> c1=C() #c1 — об'єкт класу C
>>> c1.a1 # змінні, значення яких було встановлено в __init__, доступні в усіх об'єктах цього класу
'a'
>>> C.a2='b' # a2 — атрибут класу
>>> c1.a2    # з об'єкта атрибути класу також доступні.
'b'
>>> C.a1 # оскільки в самого класу атрибута a1 нема, виникає помилка
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'C' has no attribute 'a1'
>>> C.a2 # але, оскільки a2 — атрибут класу, можна отримати доступ до неї безпосередньо з класу
'b'
>>> c1.a3='c' # c3 — атрибут лише об'єкта c1, у решті об'єктів класу C її нема
>>> c1.a3
'c'
>>> c2=C() # інший об'єкт класу C
>>> c2.a1
'a'
>>> c2.a2
'b'
>>> c2.a3 #a3 було ініціалізовано лише в c1, тому тут виникне помилка
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'C' object has no attribute 'a3'
>>> c1.a2='bbb' # щоб більше заплутати: тепер a2 — атрибут об'єкта c1 з тим же ім'ям, що a2 в класі C
>>> c2.a2 # атрибут класу (те ж саме, що С.а2)
'b'
>>> c1.a2 # атрибут об'єкта с1
'bbb'
>>> C.a2 # атрибут класу
'b'
 
>>> c2.a1='aaaaa' #Атрибути об'єкта в кожного об'єкта свої, тому, присвоюючи їх одному з об'єктів, на інші об'єкти ми не впливаємо:
>>> c2.a1
'aaaaa'
>>> c1.a1
'a'
>>> C.a1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'C' has no attribute 'a1'

Ого, дякую, норм написано, доступно і ясно

3

(31 відповідей, залишених у Python)

Master_Sergius написав:

Не поспішайте зрозуміти все й одразу. Почніть з простого. Створіть собі, як у всіх нормальних туторіалах - клас Тварина, понаслідуйте від неї котів і собак  - https://learnpythonthehardway.org/book/ex42.html
Коротше кажучи, пробуйте, досліджуйте, зрозумійте основи.

Та я пробую, ніби шарю що, куди і звідки, пробую різні приклади розбирати, але важливо в термінології розібратися, надіюсь повне розуміння з часом прийде

4

(31 відповідей, залишених у Python)

P.Y. написав:

Поле об'єкта (чи, в пітонівській термінології, атрибут об'єкта) — це змінна, що міститься в окремому екземплярі класу.
Поле класу (статичний атрибут) — змінна, розміщена у класі (і тому спільна для всіх його екземплярів).
В обох випадках, атрибутам можна присвоювати будь-які значення. Присвоєння необов'язково робити безпосередньо в тілі класу чи в ініціалізаторі або інших методах, але необхідно вказувати, чиєму атрибуту присвоюється значення.

А можете навести приклад з полем об'єкта і будь якою дією над ним? Бо я тільки шарю, що об'єкт можна присвоїти змінній, а щоб в самий об'єкт помістити змінну, то не дуже.

5

(31 відповідей, залишених у Python)

Виправив

6

(31 відповідей, залишених у Python)

koala написав:

Поле класу - це змінна, спільна для всіх змінних цього класу.
Поле об'єкту - змінна, яка є тільки в цьому об'єкті.
І ось вам короткий лікнеп по парадигмах до ООП включно: http://replace.org.ua/post/76373/#p76373

Дякую, скористаюсь

7

(31 відповідей, залишених у Python)

class ІМ'ЯКЛАСУ:
     ЗМІННА = ЗНАЧЕННЯ
     …
     def ІМ'ЯМЕТОДУ(self, ...):
          self.ЗМІННА = ЗНАЧЕННЯ
          

Я так розумію, що ініціалізована змінна автоматично присвоюється об'єкту, як його дані?? Чого в тілі методу знову пишеться self, якщо самий метод має параметр self?

8

(31 відповідей, залишених у Python)

Master_Sergius написав:

Ви ООП раніше ніяк не вивчали? Вперше почали саме з Python? Якщо так, то для початку важливо зрозуміти, що саме поняття клас - це по суті як схема для побудови об'єктів за нею. Ось є схема-конструкція авто - відповідно, всі авто, що Ви зробите за даною схемою будуть однакові. У схемі може бути метод - крутити руль, сама схема цього ж не дозволить робити. А ось будь-який автомобіль побудований за нею - дозволить крутити руль.

Зрозумів

9

(31 відповідей, залишених у Python)

І викликати з об'єкту метод ми можемо завдяки тому, що об'єкт унаслідує всі атрибути класу?

10

(31 відповідей, залишених у Python)

P.Y. написав:

Зможе, просто в цього об'єкта початково не буде ніяких атрибутів, тому спроба прочитати їх, попередньо не присвоївши їм ніякого значення, викликатиме помилку під час виконання. Методи, проте, будуть доступними.

Поле об'єкта - це змінна, якій ми присвоюємо об'єкт, а поле класу - це змінна, якій ми присвоюємо параметри у класі, так????

11

(31 відповідей, залишених у Python)

koala написав:

Параметр __init__ - self. Логічно було б припустити, що щось має створити цей self перед тим, як передавати його в __init__.

Логічно

12

(31 відповідей, залишених у Python)

Тоді якщо в класі не вказати функцію  __init__, жоден метод класу не зможе обробляти обєкт при посиланні???

13

(31 відповідей, залишених у Python)

Дякую, що відписали! Екземпляр класу створюється др функції  __init__ чи сама функція його створює??

14

(31 відповідей, залишених у Python)

Всім привіт! Вивчаю Пайтон, дійшов до ООП і застряг! Буду дуже радий і вдячний, якщо хтось допоможе розібратися!