Класс list() в Python, преобразовывает в список
Создает пустой список или преобразовывает последовательность в список
Синтаксис:
list(iterable)
Параметры:
- iterable — последовательность или объект, поддерживающий итерирование (включая генераторы).
Возвращаемое значение:
- list , изменяемая последовательность с упорядоченными элементами.
Описание:
Класс list() создает или преобразует переданный объект, поддерживающий итерирование, в список (изменяемую последовательность с упорядоченными элементами). Элементы в списках упорядочены по очередности их добавления.
Если аргумент iterable не указан, будет создан пустой список.
Примеры преобразования последовательности в список.
Создание списка list :
x = list() print(x) # [] x = list([1, 'foo', 2]) print(x) # [1, 'foo', 2]
Преобразовать кортеж tuple в список:
x = ('apple', 'banana', 'cherry') list(x) # ['apple', 'banana', 'cherry']
Преобразовать множество set в список:
x = 'apple', 'banana', 'cherry'> list(x) # ['apple', 'banana', 'cherry']
При преобразовании словаря dict в список попадают только ключи.
x = dict(apple='green', banana='yellow', cherry='red') list(x) # ['apple', 'banana', 'cherry']
Преобразовать диапазон range в список:
x = range(3) list(x) # [0, 1, 2]
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
Создание списка объектов класса
Имеется следующее задание.
‘Это упражнение предполагает создание класса RetailItem из задачи 5 по програмированию. Создайте класс CashRegister (кассовый аппарат), который может использоваться с классом RetailItem. Класс CashRegister должен иметь внутренний список объектов RetailItem, а также приведенные ниже методы:
-Метод purchase_item() (приобрести товар) в качестве аргумента принимает объект RetailItem. При каждом вызове метода purchase_item() объект RetailItem, переданный в качестве аргумента, должен быть добавлен в список.
-Метод get_total() (получить сумму покупки) возвращает общую стоимость объектов RetailItem, хранящихся во внутреннем списке объекта CashRegister.
-Метод show_items() (показать товары) выводит данные об объектах RetailItem, хранящихся во внутреннем списке объекта CashRegister.
-Метод clear() (очистить) должен очистить внутренний список объекта CashRegister.
Продемонстрируйте класс CashRegister в программе, которая пользователю выбрать несколько товаров для покупки. Когда пользователь готов рассчитаться за покупку, программа должна вывести список всех товаров, которые он выбрал для покупки, а также их общую стоимость.’
Я не могу понять как вставить экземпляр объекта класса в список другого класса.
Мой код который еще в процессе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
import cash_register import retail_item PUT_ITEM = 1 TOTAL_MONEY = 2 SHOW_ITEM = 3 DELETE_ITEM = 4 QUIT = 5 def main(): print('Эта программа позволяет купить товар, находящийся в наличии') print('----------------------------') print('В магазине имеется:') good1, good2, good3 = load_goods() print(good1.get_item()) print(good2.get_item()) print(good3.get_item()) choice = 0 while choice != QUIT: items = cash_register.CashRegister() choice = get_menu_choice() if choice == PUT_ITEM: add(items) elif choice == TOTAL_MONEY: get_money(items) def load_goods(): good1 = retail_item.RetailItem('Пиджак', 12, 59.95) good2 = retail_item.RetailItem('Дизайнерские джинсы', 40, 34.95) good3 = retail_item.RetailItem('Рубашка', 20, 24.95) return good1, good2, good3 def get_menu_choice(): print('----------------------------') print('1.Добавить товар в корзину') print('2.Показать сумму покупки') print('3.Показать товары в корзине') print('4.Очистить корзину') print('5.Выйти из программы') choice = int(input('Введите соответствующий пункт меню: ')) return choice def look_up(my_employees): name = input('Введите имя: ') print(my_employees.get(name, 'Это имя не найдено')) def add(items): item = input('Введите название товара: ') items.purchase_item(item) print(item + ' в корзине') def get_money(items): print(items.get_item_list())
Это класс retail_item:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
class RetailItem: def __init__(self, item, count, price): self.__item = item self.__count = count self.__price = price def set_item(self, item): self.__item = item def set_count(self, count): self.__count = count def set_price(self, price): self.__price = price def get_item(self): return self.__item def get_count(self): return self.__count def get_price(self): return self.__price
Это класс cash_retai:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class CashRegister: def __init__(self): self.__item_list = [] def purchase_item(self, item): self.__item_list.append(item) def get_total(self, total): pass def show_items(self): pass def clear(self): pass def get_item_list(self): return self.__item_list
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Правильное отображение списка объектов собственного класса
Приветствую. Подскажите пожалуйста. Имеется собственный класс shop class Shop(): .
Значение списка объектов из одного класса в другом
Как узнать значение списка объектов из одного класса в другом. from twisted.internet.protocol.
Создание объектов класса
у меня есть класс, в нем есть список, в цикле создаются объекты этого класса и заполняется список.
Использование объектов одного класса в функциях другого класса
Нужно создать класс Комната и класс ДвериОкна, при этом программа должна добавлять объекты класса.
Создание списка объектов класса с заранее неизвестным именем (именем самих объектов)
Уважаемые программисты, не получается решить такую задачу: требуется создать приложение (в консоли).
Регистрация: 09.03.2023
Сообщений: 3
Aalex2326, вы нашли ответ на свой вопрос? тоже не понимаю что вообще хотят в данной задаче, но думаю что «внутренний список CachRegister» это так:
1 2 3 4 5
class CachRegister(): def __init__(self, description, quantity, price): self.__description = RetailItem(description, quantity, price).get_description() self.__quantity = RetailItem(description, quantity, price).get_quantity() self.__price = RetailItem(description, quantity, price).get_price()
а дальше не могу понять условие что надо сделать и куда что должно добавляться
4974 / 3210 / 1125
Регистрация: 21.03.2016
Сообщений: 7,940
Сообщение от Exempt63
тоже не понимаю что вообще хотят в данной задаче
если бы еще знать что хотели полтора года назад то было бы проще
Сообщение от Aalex2326
класса RetailItem из задачи 5
. в основном непонятки для чего в классе self.__count = count.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
class RetailItem: def __init__(self, item, count, price): self.item = item self.count = count self.price = price def get_price(self): return self.price def __str__(self): return f' - ' class CashRegister: def __init__(self): self.item_list = [] def purchase_item(self, item): self.item_list.append(item) def get_total(self): return sum((item.get_price() for item in self.item_list)) def show_items(self): for item in self.item_list: print(item) def clear(self): self.item_list = [] cashbox = CashRegister() for data in (('Пиджак', 12, 59.95), ('Дизайнерские джинсы', 40, 34.95),('Рубашка', 20, 24.95)): item = RetailItem(*data) cashbox.purchase_item(item) print(f' total sum = ') cashbox.show_items( ) cashbox.clear()
Регистрация: 09.03.2023
Сообщений: 3
Semen-Semenich, спасибо вроде все просто но у меня выдает ошибку TypeError: descriptor ‘append’ for ‘list’ objects doesn’t apply to a ‘RetailItem’ object
тип Item в моем коде:
*item1 Майка 55 9.99
тип Item в вашем коде коде:
***item Дизайнерские джинсы — 34.95
пол дня сижу и не могу найти в чем отличие и почему у меня не добавляет в список
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
class RetailItem(): def __init__(self, description, quantity, price): self.__description = description self.__quantity = quantity self.__price = price def __str__(self): return self.__description + " " + self.__quantity + " " + self.__price class CachRegister(): def __init__(self): self.list = [] def purchase_item(self, item): self.item = list.append(item) def show_items(self): return self.list description4, quantity4, price4 = "Майка", "55", "9.99" item = RetailItem(description4, quantity4, price4) print("*item1", item, type(item)) X = CachRegister() X.purchase_item(item) print(X.show_items())
4974 / 3210 / 1125
Регистрация: 21.03.2016
Сообщений: 7,940
1 2 3 4 5 6 7
class CachRegister(): def __init__(self): self.list = [] def purchase_item(self, item): self.item = list.append(item)
ничего не смущает.
self.list = []
self.item = list .append(item)
и зачем тут self.item = .
Регистрация: 09.03.2023
Сообщений: 3
огромное спасибо я прям тупень
Регистрация: 06.04.2023
Сообщений: 1
Исходя из условий 8-й задачи Гэддиса и пройденного на тот момент материала (делал это пару лет назад) получилось вот так и вроде сходится с поставленной задачей (Если честно щас уже не смог бы также)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
class RetIt: lis=[['Товар N1','Пиджак',12,59.95],\ ['Товар N2','Дизайнерские джинсы',40,34.95],\ ['Товар N3','Рубашка',20,24.95],['Товар N4','Туфли 43разм',8,56.75],\ ['Товар N5','Костюм - фрак',14,74.85]] def __init__(self,tov,opis,kolvo,pric): self.__tov = tov self.__opis = opis self.__kolvo = kolvo self.__pric = pric def tov(self): return self.__tov def opis(self): return self.__opis def kolvo(self): return self.__kolvo def pric(self): return self.__pric def pech(self): print (self.__tov,end=' ') print (self.__opis,end=' ') print (self.__kolvo,end=' ') print (self.__pric) class CashReg: tt=RetIt.lis lst_1=[] lst_2=[] summ=0 summ_ost=0 def get_tt(self): return self.tt,self.lst_1,self.lst_2,self.summ,self.summ_ost def pur_item(self,z,i,k): if k>z[i][2]: return(0) else: if i not in self.lst_2: i_0=z[i][0] i_1=z[i][1] i_2=k i_3=z[i][3] ll=[i_0,i_1,i_2,i_3] self.lst_1.append(ll) self.tt[i][2]=self.tt[i][2]-k self.lst_2.append(i) return(1) else: uyt=self.lst_2.index(i) self.lst_1[uyt][2]=self.lst_1[uyt][2]+k self.tt[i][2]=self.tt[i][2]-k return(1) def get_total(self): self.summ=0 for i in range(len(self.lst_1)): print('sum=',self.summ,end='') print(' количество=',self.lst_1[i][2],end='') print(' цена=',self.lst_1[i][3],end='') self.summ=self.summ+self.lst_1[i][2]*self.lst_1[i][3] #print(' summ=',self.summ) def get_total_ost(self): self.summ_ost=0 for i in range(len(self.tt)): print('sum_ost=',self.summ_ost,end='') print(' количество=',self.tt[i][2],end='') print(' цена=',self.tt[i][3],end='') self.summ_ost=self.summ_ost+self.tt[i][2]*self.tt[i][3] #print(' summ_ost=',self.summ_ost) def clear(self): self.tt.clear() self.lst_1.clear() self.lst_2.clear() pp=CashReg() rbt=1 while rbt!=5: print('МЕНЮ:') print('1.Выбор товаров:') print('2.Показать общую сумму выбранных товаров:') print('3.Показать общую сумму остатков на сладе:') print('4.Обнулить кэш программы:') print('5.Закончить работу:') rbt=int(input('Выберите действие из списка')) if rbt==1: yyy='' while yyy!='н': for i in range(len(pp.tt)): print() print('N',i+1,end='') for j in range(len(pp.tt[i])): if j==1: print(' ','%-21s'%(pp.tt[i][j]),end='') else: print(' ','%-10s'%(pp.tt[i][j]),end='') print() nom=int(input('Выберите товар по списку')) nom_f=nom-1 kol=int(input('Выберите количество')) tr=pp.pur_item(pp.tt,nom_f,kol) if tr==0: print('Превышение количества имеющегося товара') else: pp.get_tt() yyy=input('Продолжим выбирать товары? --- нет=н, любая другая клавиша=продолжить') elif rbt==2: pp.get_total() u_1,u_2,u_3,u_4,u_5=pp.get_tt() print() print('-----------------------get_total()------------------------') for i in u_2: print(i[0],' ','%-21s'%(i[1]),' ',i[2],' ',i[3],' ',) print('Total----------------------------------------',u_4) st=input('Дальше? н=стоп, любая другая клавиша=продолжить ') if st=='н': rbt=5 print('До скорых встреч') elif rbt==3: pp.get_total_ost() u_1,u_2,u_3,u_4,u_5=pp.get_tt() print() print('-----------------------get_total_ost()------------------------') for i in u_1: print(i[0],' ','%-21s'%(i[1]),' ',i[2],' ',i[3],' ',) print('Total----------------------------------------',u_5) st=input('Дальше? н=стоп, любая другая клавиша=продолжить') if st=='н': rbt=5 print('До скорых встреч') elif rbt==4: pp.clear() print('База пуста') rbt=5 print('До скорых встреч') elif rbt==5: print('До скорых встреч') else: print('Еще не сделал')
Классы¶
Класс — шаблон, с помощью которого удобно описывать однотипные объекты. В классе соержатся свойства, правила создания и поведение объекта.
- Объект — экземпляр, созданный на основе шаблона.
- Атрибут — поле, хранящее значение. Содержит свойства объекта.
- Метод — функция, связанная с классом. Описывает поведение или действия объекта.
Пример класса — автомобили, его атрибутами будут: цвет, марка автомобиля, регистрационный номер.
Методами могут быть: ехать прямо, повернуть, остановиться.
Объектом класса “Автомобили” может быть конкретный автомобиль, например, Renault Logan белого цвета с номером М123РТ.
Для чего нужны классы?
Классы помогают кратко и понятно описывать объекты и их поведение независимо от основного кода программы.
Затем в основном коде можно просто создавать объекты на основе классов и работать с ними, уже не описывая их свойств и поведения.
Такой подход делает код более читаемым и понятным, а также помогает избежать многих ошибок и багов.
Синтаксис и правила создания классов¶
Для создания класса используется конструкция class ClassName . Согласно договорённостям имя класса всегда пишется с большой буквы.
Каждый класс должен содержать метод __init__ — с помощью этого метода создаётся объект класса. В этом методе инициализируются атрибуты класса:
class Person: # Объявления класса def __init__(self, name, age): # Метод инициализации self.age = age # Установка значений атрибутов self.name = name
Также в классах могут быть использованы встроенные методы, их называют магическими. Магические методы — зарезервированные методы, отвечающие за поведение объекта.
Создание классов и объектов
В языке программирования Python классы создаются с помощью инструкции class , за которой следует произвольное имя класса, после которого ставится двоеточие, далее с новой строки и с отступом реализуется тело класса:
class ИмяКласса: код_тела_класса
Если класс является дочерним, то родительские классы перечисляются в круглых скобках после имени класса.
Объект создается путем вызова класса по его имени. При этом после имени класса обязательно ставятся скобки:
ИмяКласса()
То есть класс вызывается подобно функции. Однако в случае вызова класса происходит не выполнение его тела, как это происходило бы при вызове функции, а создается объект. Поскольку в программном коде важно не потерять ссылку на только что созданный объект, то обычно его связывают с переменной. Поэтому создание объекта чаще всего выглядит так:
имя_переменной = ИмяКласса()
В последствии к объекту обращаются через связанную с ним переменную.
Пример «пустого» класса и двух созданных на его основе объектов:
>>> class A: . pass . >>> a = A() >>> b = A()
Класс как пространство имен
С точки зрения пространства имен класс можно представить подобным модулю. Также как в модуле в классе могут быть свои переменные со значениями и функции. Также как в модуле у класса есть собственное пространство имен, доступ к которому возможен через имя класса:
>>> class B: . n = 5 . def adder(v): . return v + B.n . >>> B.n 5 >>> B.adder(4) 9
Однако в случае классов используется особая терминология. Пусть имена, определенные в классе, называются атрибутами этого класса. В примере имена n и adder – это атрибуты класса B . Атрибуты-переменные часто называют полями или свойствами (в других языках понятия «поле» и «свойство» не совсем одно и то же). Полем является n . Атрибуты-функции называются методами. Методом в классе B является adder . Количество свойств и методов в классе может быть любым.
Класс как шаблон для создания объектов
На самом деле классы – не модули. Они своего рода шаблоны, от которых создаются объекты-экземпляры. Такие объекты наследуют от класса его атрибуты. Вернемся к нашему классу B и создадим на его основе два объекта:
>>> class B: . n = 5 . def adder(v): . return v + B.n . >>> a = B() >>> b = B()
У объектов, связанных с переменными a и b , нет собственного поля n . Однако они наследуют его от своего класса:
>>> a.n 5 >>> a.n is B.n True
То есть поля a.n и B.n – это одно и то же поле, к которому можно обращаться и через имя a , и через имя b , и через имя класса. Поле одно, ссылок на него три.
Однако что произойдет в момент присваивания этому полю значения через какой-нибудь объект-экземпляр?
>>> a.n = 10 >>> a.n 10 >>> b.n 5 >>> B.n 5
В этот момент у экземпляра появляется собственный атрибут n , который перекроет (переопределит) родительский, то есть тот, который достался от класса.
>>> a.n is B.n False >>> b.n is B.n True
При этом присвоение через B.n отразится только на b и B , но не на a :
>>> B.n = 100 >>> B.n, b.n, a.n (100, 100, 10)
Иная ситуация нас ожидает с атрибутом adder . При создании объекта от класса функция adder не наследуется как есть, а как бы превращается для объекта в одноименный метод:
>>> B.adder is b.adder False >>> type(B.adder) >>> type(b.adder)
Через имя класса мы вызываем функцию adder :
>>> B.adder(33) 133
Через имя объекта вызываем метод adder :
>>> b.adder(33) Traceback (most recent call last): File "", line 1, in TypeError: adder() takes 1 positional argument but 2 were given
В сообщении об ошибке говорится, что adder принимает только один аргумент, а было передано два. Откуда появился второй, если в скобках было указано только одно число?
Дело в том, что в отличии от функции в метод первым аргументом всегда передается объект, к которому применяется этот метод. То есть выражение b.adder(33) как бы преобразовывается в adder(b, 33) . Сам же b.adder как объект типа method хранит сведения, с каким классом он связан и какому объекту-экземпляру принадлежит:
>>> b.adder >
В нашем случае, чтобы вызывать adder через объекты-экземпляры, класс можно переписать так:
>>> class B: . n = 5 . def adder(obj, v): . return v + obj.n . >>> b = B() >>> b.adder(33) 38
В коде выше при вызове метода adder переменной-параметру obj присваивается объект, связанный с переменной, к которой применяется данный метод. В данном случае это объект, связанный с b . Если adder будет вызван на другой объект, то уже он будет присвоен obj :
>>> a = B() >>> a.n = 9 >>> a.adder(3) 12
В Python переменную-параметр метода, которая связывается с экземпляром своего класса, принято называть именем self. Таким образом, более корректный код будет таким:
>>> class B: . n = 5 . def adder(self, v): . return v + self.n
Можем ли мы все также вызывать adder как функцию, через имя класса? Вполне. Только теперь в функцию надо передавать два аргумента:
>>> B.adder(B, 200) 205 >>> B.adder(a, 200) 209
Здесь первым аргументом в функцию передается объект, у которого есть поле n лишь только потому, что далее к этому полю обращаются через выражение self.n .
Однако если атрибут определен так, что предполагается его работа в качестве метода, а не функции, то через класс его уже не вызывают (нет смысла, логика программы этого не подразумевает).
С другой стороны, в ООП есть понятие «статический метод». По сути это функция, которая может вызываться и через класс, и через объект, и которой первым аргументом не подставляется объект, на который она вызывается. В Python статический метод можно создать посредством использования специального декоратора.
Атрибут __dict__
В Python у объектов есть встроенные специальные атрибуты. Мы их не определяем, но они есть. Одним из таких атрибутов объекта является свойство __dict__ . Его значением является словарь, в котором ключи – это имена свойств экземпляра, а значения – текущие значения свойств.
>>> class B: . n = 5 . def adder(self, v): . return v + self.n . >>> w = B() >>> w.__dict__ <> >>> w.n = 8 >>> w.__dict__
В примере у экземпляра класса B сначала нет собственных атрибутов. Свойство n и метод adder – это атрибуты объекта-класса, а не объекта-экземпляра, созданного от этого класса. Лишь когда мы выполняем присваивание новому полю n экземпляра, у него появляется собственное свойство, что мы наблюдаем через словарь __dict__ .
В следующем уроке мы увидим, что свойства экземпляра обычно не назначаются за пределами класса. Это происходит в методах классах путем присваивание через self . Например, self.n = 10 .
Атрибут __dict__ используется не только для просмотра свойств объекта. С его помощью можно удалять, добавлять свойства, а также изменять их значения.
>>> w.__dict__['m'] = 100 >>> w.__dict__ >>> w.m 100
Практическая работа
Напишите программу по следующему описанию. Есть класс «Воин». От него создаются два экземпляра-юнита. Каждому устанавливается здоровье в 100 очков. В случайном порядке они бьют друг друга. Тот, кто бьет, здоровья не теряет. У того, кого бьют, оно уменьшается на 20 очков от одного удара. После каждого удара надо выводить сообщение, какой юнит атаковал, и сколько у противника осталось здоровья. Как только у кого-то заканчивается ресурс здоровья, программа завершается сообщением о том, кто одержал победу.
Курс с примерами решений практических работ:
pdf-версия
X Скрыть Наверх
Объектно-ориентированное программирование на Python