|
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 42
|
||||||
Классы и экземпляры02.10.2020, 11:26. Показов 5915. Ответов 22
Есть класс человека, кота и дома. Создаем каждого по одному экземпляру.
Нужно создать метод у Человека, который присвоит один единственный экземпляр Дома одному Коту. Как такое сделать? На всякий случай прикрепил весь код проекта, но в нем кот сам заехал в дом.
0
|
||||||
| 02.10.2020, 11:26 | |
|
Ответы с готовыми решениями:
22
классы, экземпляры, протоколы, и.т.п
Проверить код, правильно ли определены классы, экземпляры, методы, возвращены данные? |
|
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 42
|
|||
| 02.10.2020, 12:05 [ТС] | |||
|
Нужно именно чтобы это сделал экземпляр Человека. Или вы имеете ввиду, создать метод у Кота, а вызвать метод Человеком?
0
|
|||
|
|
|||
| 02.10.2020, 12:15 | |||
|
Добавлено через 5 минут Насчёт хозяина, кстати, уже возможны варианты - как он будет переселять котов. В общем случае, у одного человека может быть много котов. Проще будет, если человек при переселении переберёт всех своих котов и каждого затащит в новый дом. Но это не совсем феншуйно, потому что нагружает человека лишними знаниями. Поэтому более феншуйно делать через события. У человека будет событие "переезд", кот должен подписаться на него и слушать. В случае переезда - самостоятельно идти вслед за хозяином. Но это сложнее.
1
|
|||
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
||||||
| 02.10.2020, 12:42 | ||||||
Сообщение было отмечено VetalM как решение
Решение
1
|
||||||
| 02.10.2020, 16:37 | |
|
VetalM, Начать нужно с того, что описать все словами в виде рассказа про человека живущего в доме и про кота. А потом уже реализовать этот рассказ в виде модели искусственного интеллекта на питоне.
Напишите рассказ, Вам помогут оформить его в виде макета на питоне. Добавлено через 3 минуты В доме <по такому-то адресу> живет <имя> ... и так далее. Добавлено через 14 минут При описании класса описываются все свойства и методы общие для экземпляров этого класса. Что, все коты имеют свойство дом? Существуют дикие коты, у которых вообще отсутствует такое понятие как дом, в том смысле, как мы определяем дом (с адресом) для человека. Если кот живет в доме у человека, то это не свойство всех котов, а свойство отдельного экземпляра класса котов. В общем пишите рассказ, потом будем разбираться. Добавлено через 14 минут Разовые события не являются атрибутами класса, это атрибуты конкретного экземпляра.
1
|
|
|
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 42
|
|||||
| 02.10.2020, 17:35 [ТС] | |||||
|
Задача - сделать все классами и объектами, чтобы понять как они работают и взаимодействуют. События выполняются рандомно или по условиям.
0
|
|||||
| 03.10.2020, 03:29 | |||
|
VetalM,
Однако описать полностью мышление человека не реально (по крайней мере в обозримом будущем), поэтому ИИ моделирует работу мозга в упрощенном варианте. Вернемся к Вашей задаче. Основное в понимании класса и ООП частью которого он является, это в том числе понимание что такое в ООП self. Класс, это объединение множества объектов обладающих некоторыми общими свойствами. self обозначает обобщенный объект из этого множества объектов. Если мы описываем класс, то любой конкретный экземпляр этого класса, можно подставить внутрь определения этого класса вместо self , и для него будет применимо все, что применимо для self в определении этого класса. Если мы описываем класс Человек, то любой человек должен обладать всеми теми свойствами, которые описаны в этом классе. И в свою очередь, любой объект, который имеет все те атрибуты, которые описаны в этом классе, будет принадлежать этому классу. Именно в этот момент, у конкретного экземпляра кота, появится атрибут дом. Аналогично, человек должен иметь метод "Назвать кота", который этому экземпляру кота даст атрибут name и его конкретное значение. Кошки не имеющие хозяев, не имеют имен. Поэтому name не является атрибутом класса Кошек. Этот атрибут появляется у конкретного экземпляра только потом, когда кота берет к себе хозяин. Но что тогда писать в классе Cat ? Можно было бы описать общие свойства для всех котов. Подкласс кошачий, четыре ноги два уха, хищник, цвет и так далее. Но все эти свойства для Вашей задачи не важны. Поэтому для упрощения, стоит определить только одно свойство "Вид животного" и его значение "кошка". Хотя можно определить еще такие свойства, как "пол" и "возраст", которые присущи всем экземплярам класса "Кошки" и потому могут быть описаны в классе. Это не все, что можно рассказать про ООП и классы, но это важно понимать при программировании с использованием ООП. PS. При мышлении у человека могут возникать несколько вариантов решения. И в Вашей задаче возможны различные подходы. Можно «взять кота» разместить в описании класса, так как все люди, когда берут кота, то делают домом кота свой дом и дают коту имя. Но можно определить эти действия, как индивидуальные действия (события) именно для этого экземпляра человека. Тогда это действие описывается для этого экземпляра человека вне класса. Можно и так и так, но более соответствует реальности описать внутри класса, так как так поступают все, за очень редким исключением. И тогда только для этих экземпляров , относящихся к этим редким исключениям, описывать свои исключительные методы (но вне описания класса).
1
|
|||
| 03.10.2020, 15:14 | ||
|
Поэтому не вижу смысла продолжать дискуссию. Удачи. ![]() Добавлено через 2 часа 36 минут VetalM, В принципе Ваш код работает и добавка от КулХацкеръ, решает Вашу проблему. Интересно у Вас работает Петя. У него нет постоянной работы и он находит работу от случая к случаю. ![]() Хотя принципы ООП у Вас соблюдены не полностью. Из Вашего кода следует, что все люди как правило не имеют постоянной работы, так как именно такой режим работы заложен в метод деятельность человека, который определен в классе людей. Мне кажется Вы не совсем понимаете разницы между атрибутами, присущими всем экземплярам класса, описываемыми в классе как атрибуты объекта self, и атрибутами конкретного экземпляра класса присущими только ему. Желаю успехов в освоении ООП.
0
|
||
|
|
||
| 03.10.2020, 15:40 | ||
|
ИИ - это действиельно моделирование мышления. Но ООП тут даже близко не стояло. ООП - моделирование объектов предметной области, а отнюдь не мышления. Вам также всего доброго
0
|
||
|
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 42
|
|||||||
| 03.10.2020, 18:48 [ТС] | |||||||
|
Кликните здесь для просмотра всего текста
0
|
|||||||
| 04.10.2020, 02:34 | ||
|
VetalM, Хотел написать свой вариант для решения Вашей задачи, в качестве примера как с помощью ООП моделировать мыслительный процесс человека. В реальном мире не существует таких объектов как класс и self. Это объекты нашего мышления. Класс, это собирательный образ, формируемый нашим сознанием, множества объектов реального мира, которые имеют общие свойства. Он оформляется как объект мышления, которому присваивается имя. Особенность этого объекта (множества) заключается в том, что мы не наблюдаем все реальные объекты этого множества одновременно, а в процессе рассмотрения реальных объектов причисляем их или нет к этому множеству. То есть рассмотрение реальных объектов принадлежащих этому множеству происходит в нашем сознании динамически.
Теперь рассмотрим, что такое self . Реального объекта соответствующему ему не существует. Это динамически изменяющийся объект в нашем сознании. Например для класса "Яблоко", self это как непрерывный перебор в нашем сознании образов реальных яблок, как бы динамический просмотр киноленты кадров с реальными яблоками. Я это называю обобщенным объектом. Для класса "Яблоко", это будет не конкретное некоторое яблоко, а понятие яблока вообще. Говоря о яблоке абстрактно, вы непроизвольно начинаете перебирать в уме конкретные яблоки. И в сравнении определять общие свойства , которые присущи любому реальному яблоку. Таким перебором мы создаем класс, который описывает свойства принадлежащие любому реальному яблоку. И такое абстрактное (сформированное в нашем сознании) яблоко мы называем объектом self в нашем классе "Яблоко" . То есть объект self в классе "Яблоко" будет иметь только те свойства, которые присущи всем реальным яблокам. И в нем не будет свойств присущих только отдельным экземплярам яблок, но не всем. И такой абстрактный объект я называю обобщенным понятием яблока и именно этот абстрактный объект обозначается в классе "Яблоко" как self. Аналогично self используется и в других классах, для обозначения своих абстрактных объектов. Извините за многословие, короче не получилось. Именно это не понимают те, кто не видит, что ООП описывает мыслительный процесс человека и потому является инструментом для моделирования мышления человека. А это значит является одним из инструментов, используемым при создании "Искусственного интеллекта". Добавлено через 19 минут Но для этого сначала нужно описать всю задачу словами, то есть словами оформить мыслительный процесс описывающий реальность (сконструированную реальность), Затем создать алгоритм решения данной задачи. И после этого с помощью ООП и питона написать код являющийся моделью мыслительного процесса описывающего эту сконструированную реальность. То есть этот код будет моделировать мыслительный процесс решения данной задачи. Это и называется ИИ. Не обещаю, но может соберусь и сделаю. Смотря как будет со временем. Здесь будет нужен не просто код, а в том числе подробное объяснение процесса создания этого кода. Что бы решение этой задачи могло быть обучающим примером.
1
|
||
|
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 42
|
|
| 05.10.2020, 09:16 [ТС] | |
|
Добрый день. Было бы интересно посмотреть как выглядит и работает этот код.
0
|
|
| 05.10.2020, 22:47 | |
|
Пример ООП.
Начал с написания ТЗ (технического задания) в виде "Постановки задачи" (ПЗ), необходимой для написания кода. Вот первый вариант ПЗ. Исходное задание: “””# Необходимо создать класс кота. У кота есть атрибуты - сытость и дом (в котором он живет). # Кот живет с человеком в доме. # Для кота дом характеризируется - миской для еды и грязью. # Изначально в доме нет еды для кота и нет грязи. # Доработать класс человека, добавив методы # подобрать кота - у кота появляется дом. # купить коту еды - кошачья еда в доме увеличивается на 50, деньги уменьшаются на 50. # убраться в доме - степень грязи в доме уменьшается на 100, сытость у человека уменьшается на 20. # Увеличить кол-во зарабатываемых человеком денег до 150 (он выучил пайтон и устроился на хорошую работу ![]() # Кот может есть, спать и драть обои - необходимо реализовать соответствующие методы. # Когда кот спит - сытость уменьшается на 10 # Когда кот ест - сытость увеличивается на 20, кошачья еда в доме уменьшается на 10. # Когда кот дерет обои - сытость уменьшается на 10, степень грязи в доме увеличивается на 5 # Если степень сытости < 0, кот умирает. # Так же надо реализовать метод "действуй" для кота, в котором он принимает решение # что будет делать сегодня # Человеку и коту надо вместе прожить 365 дней. Усложненное задание (делать по желанию): # Создать несколько (2-3) котов и подселить их в дом к человеку. # Им всем вместе так же надо прожить 365 дней. # (Можно определить критическое количество котов, которое может прокормить человек...) ””” Начинаем с написания технического задания (постановка задачи). С помощью мыслительного процесса, и взяв за основу исходное задание, описать события (действия), которые совершает Петя. В результате опишем пример, который должен соответствовать реальности (как бы это было в реальности). Степень приближения к реальности зависит от глубины проработки. Неизбежно упрощение, так как точно описать реальность невозможно (из-за слишком большого объема информации). Петя живет в доме номер 815. Так как в задании # Увеличить кол-во зарабатываемых человеком денег до 150 (он выучил пайтон и устроился на хорошую работу , то у Пети есть постоянная работа (под «устроился» подразумевают постоянную работу), приносящая ежедневно денег 150. Как проходит день у Пети. Должен быть в виде функции за пределами класса, так как распорядок дня у каждого человека (у каждого экземпляра класса Man) свой: В течение дня 1) Если Петя голодный и «сытость» у него становится <= 0, то он умирает. 2) В противном случае, если он еще живой и «сытость» < 20 , и в доме есть еда, то он ест. В исходном коде написано неправильно, он там ест один раз, восстанавливая 10 сытости. Хотя в реальности он должен есть пока не наестся, пока сытость не станет = 50. Не вижу причин, почему он должен быть полуголодным, если у него есть деньги на еду. Если еды нет, но есть деньги, то он ее покупает и ест, пока не наестся. ![]() 3) Петя идет работать 4) По окончании работы получает зарплату за день. 5) Если запасов еды в доме не достаточно < 30, то он идет в магазин, Так как в день он тратит 30 сытости. Нужно иметь > 20 запаса еды, на восстановление потраченной за день сытости. 6) Если не достаточно корма, то идет за кормом котам. (Это действие только тогда, когда у него есть коты). То есть последовательность действий у Пети будет разная для случаев, когда у него есть коты, и когда у него нет котов. Так как наличие котов присуще не всем людям, то действия связанные с котами не должны быть методами внутри класса, а описываться функциями вне класса. 7) Если пополнять запасы еды не нужно, то он случайным образом выбирает одно из занятий: убирает грязь, смотрит телевизор. Петя взял себе котенка мужского пола и назвал его Пушком. Петя решил взять к себе нескольких котов. Но для того, что бы определить скольких котов он сможет прокормить на свою зарплату решил брать по одному коту, что бы посмотреть, по балансу, скольких котов он потянет по деньгам. В задаче мы видим объекты трех основных классов: человек (Man), кот (Cat), дом (House), описывающий дома, в котором живет и в котором будет жить Петя с котами. Начнем с того, что опишем эти классы. Затем напишем код, моделирующий действия Пети, которые описаны выше в постановке задачи. При постановке задачи стало ясно, что Основное задание составлено неверно. Например не все люди имеют котов, и поэтому включать в класс Man всего, что связано с котом, является ошибкой. Действия связанные с котом, являются индивидуальными для экземпляра класса petya (Петя). Да и вообще распорядок дня act индивидуален для каждого человека. Поэтому он не может описываться в виде метода внутри класса Man. Его нужно оформлять в виде функции за пределами класса. И так далее. Составив ТЗ (техническое задание), в виде ПЗ (постановки задачи) для написания кода, можно начинать писать код. Начну не спеша, когда напишу, то выложу сюда.
1
|
|
| 08.10.2020, 17:53 | |||||||
|
Кликните здесь для просмотра всего текста
1) Класс описывает только общие для всех экземпляров этого класса атрибуты (свойства и методы) Так как не все люди имеют котов, то в класс Man нельзя включать свойства и методы связанные с котами. Хотя, если рассматривать класс только таких людей, которые имеют котов, то можно обойтись одним классам, но для ясности назвав его Man_with_cat . У меня в качестве учебного примера рассматриваются два класса, Man , людей которые не имеют котов и Man_with_cat , людей которые имеют котов. Поэтому я смог разделить код на жизнь без кота и на жизнь с котом. И в моем коде показано, как перейти от состояния жизни без кота, к состоянию жизни с котом. 2) Второе основное отличие от Вашего кода, это то, что в моем примере проводится четкое различие от методов (атрибутов) которые принадлежат всем экземплярам класса и потому описываются в классе, и методами (атрибутами), которые принадлежат только некоторым конкретным экземплярам класса и потому выносятся за пределы класса в виде функций и устанавливаются для конкретных экземпляров класса за пределами классса с помощью функции setattr() . В нашем примере расписание дня для каждого человека разное (у каждого своя жизнь), поэтому метод act() неправильно описывать в классе. Поэтому я вынес этот метод за пределы класса и добавляю соответствующие наличию кота методы в качестве атрибутов для экземпляров человек (без кота) и человек с котом. Кстати забыл сказать, один и тот же человек в нашем случае сначало принадлежит к классу человек (без кота), а затем берет себе кота, и начинает принадлежать другому классу, человек с котом. У меня эта проблема решается следующим образом. Я в нужный момент создаю новый экземпляр, но уже класса человек с котом, и передаю текущие данные от экземпляра человек(без кота) к экземпляру человек с котом, подразумевая, что это один и тот же человек но изменивший качество( свою принадлежность к соответствующему классу). Вот вроде все, что будет не понятно, спрашивайте. Добавлено через 16 минут VetalM, По ходу написания кода я пришел к следующим выводам. Описать реальный процесс мышления человека, то есть создать ИИ строго соответствующий реальности, мало вероятно. Поэтому в любом случае придется упрощать описание реальности. Чем проще математическая модель тем она меньше соответствует реальности, но тем ее проще реализовать и так же будет выше ее производительность (скорость работы). Поэтому для каждой конкретной задачи нужно выбирать свою золотую середину, приемлемую для конкретного случая. Поэтому для вашей задачи вполне подходит Ваш вариант, а мой для вашего случая слишком тяжеловат. Мой Вариант я написал, что бы продемонстрировать возможности ООП в моделировании реального мышления человека. И может быть кому то пригодятся используемые мной приемы (не притененную для них на авторство, вполне возможно они у кого то описаны, может у того же Лутца ).
1
|
|||||||
|
|
|
| 08.10.2020, 18:37 | |
|
Viktorrus, плохо.
Не знаю, как у вас с ИИ, но ООП - на тройку с минусом. Кроме того, непонятно, при чём же тут всё-таки ИИ. Не вижу тут моделирования мышления. Моделирование людей, котов и домов с их соотношениями вижу (абсолютно неквалифицированное, но это уже другой вопрос). А моделирование мышления - нет.
0
|
|
|
1 / 1 / 0
Регистрация: 30.03.2020
Сообщений: 42
|
|
| 09.10.2020, 14:46 [ТС] | |
|
Viktorrus, подскажите, зачем в дочернем классе Man_with_cat дублировать методы класса Man? Вроде там можно добавить только методы take_cat_in_the_house, cat_shopping.
0
|
|
| 09.10.2020, 15:23 | |
|
VetalM, Хочу пояснить про связь ООП и ИИ. ООП это всего лишь одна из технологий используемой при проектировании ИИ, но одной этой технологии не достаточно. Для ИИ важно использовать нечеткую логику, так как именно с нечеткой логикой работает наше сознание. В реальном мышлении обычно для каждого события используется вероятность его появления. Правда при этом мы не оперируем процентами вероятности, а вероятность оцениваем интуитивно, используя понятия больше, меньше. Так же при проектировании ИИ используются одновременно еще и другие технологии.
Но для нас важно понимать, что в программирование ООП пришло из работ связанных с ИИ. Поэтому нужно это понимать, что бы осмысленно использовать ООП в питоне. С теми, кто это не понимает, я в дискуссии не вступаю, так как они все равно этого не поймут. И поэтому все на что они способны, это устраивать базар, делая утверждения и не утруждая себя доказательствами для этих утверждений (принципы базарной ругани).
0
|
|
|
|
|
| 09.10.2020, 15:27 | |
|
VetalM, незачем
0
|
|
| 09.10.2020, 15:27 | |
|
Помогаю со студенческими работами здесь
20
Экземпляры формы Экземпляры в радиусе экземпляры класса Экземпляры класса Экземпляры Oracle12W Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|