21

Re: Питання та відповіді по ООП

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

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

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

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

Подякували: olegzavidovsky1

22

Re: Питання та відповіді по ООП

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

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

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

23 Востаннє редагувалося Master_Sergius (24.02.2017 16:50:52)

Re: Питання та відповіді по ООП

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

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

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


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

Подякували: olegzavidovsky1

24

Re: Питання та відповіді по ООП

Master_Sergius написав:

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

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

25 Востаннє редагувалося P.Y. (24.02.2017 22:02:39)

Re: Питання та відповіді по ООП

>>> 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' # а3 — атрибут лише об'єкта 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'
Подякували: olegzavidovsky1

26

Re: Питання та відповіді по ООП

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'

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

27

Re: Питання та відповіді по ООП

olegzavidovsky написав:

Виправив

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

28

Re: Питання та відповіді по ООП

Українські книжки з програмування в незалежній Україні? Ні, синку, це фантастика.

Подякували: NaharD, koala2

29

Re: Питання та відповіді по ООП

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

Українські книжки з програмування в незалежній Україні? Ні, синку, це фантастика.

вони писалися.. але не видавалися більше 100 екземплярів :(

30

Re: Питання та відповіді по ООП

koala написав:

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

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

31

Re: Питання та відповіді по ООП

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

Українські книжки з програмування в незалежній Україні? Ні, синку, це фантастика.

Чому  ж? Є книга Віталія Подоби по джанго, доволі непогана по відгуках.

32 Востаннє редагувалося P.Y. (25.02.2017 14:13:54)

Re: Питання та відповіді по ООП

Q-bart написав:
P.Y. написав:

Українські книжки з програмування в незалежній Україні? Ні, синку, це фантастика.

Чому  ж? Є книга Віталія Подоби по джанго, доволі непогана по відгуках.

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

P.S. Ще Bunyk займався перекладом Dive into Python (див. http://replace.org.ua/topic/121/ ).