У меня есть простой вопрос с практикой, а не технический/«как я?» Вопрос, связанный с объектно-ориентированным программированием в Python.Python Когда ООП и когда не ООП
Я недавно работал над некоторым кодом OOP Python, который читает данные и хранит их в классе на заказ. Это слишком подробно, чтобы опубликовать весь код здесь, поэтому я сделаю очень простой пример, используя торты.
Мой основной класс - торт - выглядит примерно так и хранит различные атрибуты данных о каждом «пироге». Некоторые переменные являются строками, например. имя, тогда как другие являются целыми числами или плавают, например. слои.
class cake():
def __init__(self, name, layers, icing):
self.name = name
self.layers = layers
self.icing = icing
Большое количество этих объектов создается, когда данные считываются, все из которых хранятся в списке:
cakebox = []
cakebox.append(cake("chocolate", 2, "Y"))
cakebox.append(cake("chocolate", 3, "Y"))
cakebox.append(cake("chocolate", 2, "N"))
cakebox.append(cake("lemon", 3, "Y"))
cakebox.append(cake("jamsponge", 2, "N"))
cakebox.append(cake("fruit", 1, "N"))
......... и т.д.
Идея списка 'cakebox' состоит в том, чтобы действовать как простая «база данных», из которой можно получить результаты. Это легко сделать, используя списочные, такие как
icingcakes = [x for x in cakebox if x.icing == "Y"]
Но некоторые операции я нахожу, что я делаю снова и снова, например, получить все уникальные имена торт:
uniquecakenames = list(set([x.name for x in cakebox]))
Учитывая это, я использую код (или аналогичный) несколько раз, я бы лучше сделать «cakebox» классом с этим кодом как методом, возможно, используя «список» в качестве суперкласса, или я усложняю ситуацию, создав класс cakebox в этом примере?
Обратите внимание, что реальный код более сложный, чем мой довольно упрощенный пример торта ....! Кроме того, я только что набрал этот пример на своем iPad, поэтому, пожалуйста, простите меня, если есть небольшие ошибки кода - надеюсь, этого достаточно, чтобы преодолеть основные моменты.
Все комментарии или предложения приветствуются
Если ваш код в настоящее время работает, возможно, вам лучше поставил бы этот вопрос на http://codereview.stackexchange.com/ – shuttle87
Да, совершенно нормально создавать класс контейнера, а его базирование на существующем контейнере типичный. Вы даже можете использовать несколько контейнеров как часть класса (например, в этом случае у вас может быть словарь для отслеживания всех тортов с обледенением или нет). Вы можете обновить это при добавлении или удалении торта. Выполнение этого разумно сделает добавление и удаление немного медленнее, но поиск определенных предметов * * быстрее. – kindall
(OT) «ООП или не ООП, то есть вопрос- ли«ТИС благороднее в виду страдать Стропы и стрелы яростной Haters, Или взять в руки оружие против моря классов, И противостоять, положить конец им? " –