Параметри пошуку
Ласкаво просимо!
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
koala написав:Мені дуже кортить спитати: що, в книжках продовжується піздньорадянська традиція, коли текст книжки український, але коментарі і повідомлення в коді російські? А ви, відповідно, просто повторюєте? Чи це у вас випадково так вийшло?
Я приклад брав з російськомовного сайту і забув переправити, тому так і вийшло
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'
Ого, дякую, норм написано, доступно і ясно
Master_Sergius написав:Не поспішайте зрозуміти все й одразу. Почніть з простого. Створіть собі, як у всіх нормальних туторіалах - клас Тварина, понаслідуйте від неї котів і собак - https://learnpythonthehardway.org/book/ex42.html
Коротше кажучи, пробуйте, досліджуйте, зрозумійте основи.
Та я пробую, ніби шарю що, куди і звідки, пробую різні приклади розбирати, але важливо в термінології розібратися, надіюсь повне розуміння з часом прийде
P.Y. написав:Поле об'єкта (чи, в пітонівській термінології, атрибут об'єкта) — це змінна, що міститься в окремому екземплярі класу.
Поле класу (статичний атрибут) — змінна, розміщена у класі (і тому спільна для всіх його екземплярів).
В обох випадках, атрибутам можна присвоювати будь-які значення. Присвоєння необов'язково робити безпосередньо в тілі класу чи в ініціалізаторі або інших методах, але необхідно вказувати, чиєму атрибуту присвоюється значення.
А можете навести приклад з полем об'єкта і будь якою дією над ним? Бо я тільки шарю, що об'єкт можна присвоїти змінній, а щоб в самий об'єкт помістити змінну, то не дуже.
koala написав:Поле класу - це змінна, спільна для всіх змінних цього класу.
Поле об'єкту - змінна, яка є тільки в цьому об'єкті.
І ось вам короткий лікнеп по парадигмах до ООП включно: http://replace.org.ua/post/76373/#p76373
Дякую, скористаюсь
class ІМ'ЯКЛАСУ:
ЗМІННА = ЗНАЧЕННЯ
…
def ІМ'ЯМЕТОДУ(self, ...):
self.ЗМІННА = ЗНАЧЕННЯ
…
Я так розумію, що ініціалізована змінна автоматично присвоюється об'єкту, як його дані?? Чого в тілі методу знову пишеться self, якщо самий метод має параметр self?
Master_Sergius написав:Ви ООП раніше ніяк не вивчали? Вперше почали саме з Python? Якщо так, то для початку важливо зрозуміти, що саме поняття клас - це по суті як схема для побудови об'єктів за нею. Ось є схема-конструкція авто - відповідно, всі авто, що Ви зробите за даною схемою будуть однакові. У схемі може бути метод - крутити руль, сама схема цього ж не дозволить робити. А ось будь-який автомобіль побудований за нею - дозволить крутити руль.
Зрозумів
І викликати з об'єкту метод ми можемо завдяки тому, що об'єкт унаслідує всі атрибути класу?
P.Y. написав:Зможе, просто в цього об'єкта початково не буде ніяких атрибутів, тому спроба прочитати їх, попередньо не присвоївши їм ніякого значення, викликатиме помилку під час виконання. Методи, проте, будуть доступними.
Поле об'єкта - це змінна, якій ми присвоюємо об'єкт, а поле класу - це змінна, якій ми присвоюємо параметри у класі, так????
koala написав:Параметр __init__ - self. Логічно було б припустити, що щось має створити цей self перед тим, як передавати його в __init__.
Логічно
Тоді якщо в класі не вказати функцію __init__, жоден метод класу не зможе обробляти обєкт при посиланні???
Дякую, що відписали! Екземпляр класу створюється др функції __init__ чи сама функція його створює??
Всім привіт! Вивчаю Пайтон, дійшов до ООП і застряг! Буду дуже радий і вдячний, якщо хтось допоможе розібратися!
Знайдені повідомлення: 14