Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
11 / 8 / 3
Регистрация: 25.12.2018
Сообщений: 118
1

Одни говорят что класс это объект, другие, что класс-это шаблон объекта, дак что такое объект?

10.06.2020, 10:11. Просмотров 2870. Ответов 9


Вот читаю и википедию, и на форумах, одни пишут, что класс, это шаблон по которому создается объект, другие пишут, что класс может быть или не быть объектом, третьи пишут, что класс-это всегда объект.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2020, 10:11
Ответы с готовыми решениями:

сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять?
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в...

Что такое объект, класс, метод?
Изучаю язык java, а он в свою очень объектно-ориентированный, поэтому хочу знать определения...

Класс-контейнер? Что это такое и с чем его «едят»?
Вечер добрый, столкнулся со следующей проблемой, в общем, есть задание: Создать класс-контейнер,...

Что такое шаблон, кроме того, что это набор тегов которые при помощи php скрипта заменяются на контент?
Объясните пожалуйста что такое шаблон, кроме того что это набор тегов которые при помощи php...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы Fullstack-разработчиков на Python
9
531 / 356 / 159
Регистрация: 22.03.2020
Сообщений: 894
10.06.2020, 11:09 2
Класс — тип, описывающий устройство объектов. Объект — это экземпляр класса. Класс можно сравнить с чертежом, по которому создаются объекты.
Но в то же время класс тоже является объектом стандартного метакласса type.
Так как в Python понятия тип объекта и класс объекта - это синонимы, то это можно увидеть при помощи функции type.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Определим пустой класс
class A:
    pass
 
# Создадим объект (экземпляр) этого класса
a = A()
 
# Выведем тип созданного экземпляра
print(type(a))  # <class '__main__.A'>
# Судя по выводу a является объектом класса A
 
 
# Выведем тип созданного нами класса
print(type(A))  # <class 'type'>
# Судя по выводу класс A является объектом класса type
1
11 / 8 / 3
Регистрация: 25.12.2018
Сообщений: 118
10.06.2020, 11:25  [ТС] 3
Я это читал, спасибо что скопировали и вставили сюда текст. А мой вопрос вы, явно, прочитали не весь.
0
531 / 356 / 159
Регистрация: 22.03.2020
Сообщений: 894
10.06.2020, 11:30 4
Цитата Сообщение от Чеволек Павук Посмотреть сообщение
спасибо что скопировали и вставили сюда текст
Лень было печатать.
Цитата Сообщение от Чеволек Павук Посмотреть сообщение
А мой вопрос вы, явно, прочитали не весь.
И на какую часть вашего вопроса я не ответил? У вас из вопросительного только:
Цитата Сообщение от Чеволек Павук Посмотреть сообщение
дак что такое объект?
Я скопировал ответил:
Цитата Сообщение от unfindable_404 Посмотреть сообщение
Объект — это экземпляр класса.
И привёл примеры. Если что-то не понятно, то можно переспросить или задать более конкретный вопрос. Я вам тут не особо горю желанием пересказывать целиком основы ООП.
1
1289 / 757 / 172
Регистрация: 22.02.2018
Сообщений: 2,174
Записей в блоге: 3
10.06.2020, 14:41 5
Лучший ответ Сообщение было отмечено Чеволек Павук как решение

Решение

Чеволек Павук, ООП это способ моделировать реальный мыслительный процесс человека (хотя некоторые используют ООП формально, не вникая в его реальную сущность). Объектно ориентированные языки появились уже давно, я сейчас даже и не упомню названия их всех.
Вот здесь перечислен список языков программирования в той или иной степени использующие ООП.
https://ru.qwe.wiki/wiki/List_... _languages Как видите их огромное количество.
Я уже несколько раз на этом форуме объяснял, что такое ООП.
Сейчас поищу в своих комментариях и выложу здесь.

Добавлено через 1 час 4 минуты
Чеволек Павук, Я уже столько наклепал комментариев, что что-то найти проблематично. Поэтому напишу по новой.
Все, что мы наблюдаем в окружающем нас мире, это объекты и действия их или над ними.
Надеюсь Вы пользуетесь стульями? Стул это объект. Так же в нашем сознании он также является объектом. Объект нашего сознания, это отображение объекта реального мира. В реальности Вы не можете собрать вместе все стулья, с которыми Вы когда то сталкивались в реальной жизни. Однако наш мозг обладает способностью запоминать образы объектов и позже вызывать их в памяти. Что позволяет их сравнивать и находить общие черты. (свойства). Объекты обладающие одинаковыми свойствами мы мысленно объединяем в один класс. Например класс стульев. Основной признак стула, что мы можем на нем сидеть. Например поваленное дерево в лесу, тоже может использоваться как стул. Но одновременно оно является деревом, со своими специфическими свойствами, то есть одновременно принадлежит классу деревьев. В первых ООП языках было ветвление только вниз. Хотя в реальности, как мы видим ветвление может быть и вверх. В питоне ветвление и вниз и вверх. Один класс может не только иметь подклассы, но и являться подклассом нескольких суперклассов.
Например, для класса стульев существуют подклассы Стулья деревянные, Стулья пластмассовые, стулья металлические и так далее. В свою очередь класс стульев является подклассом класса Мебель.
Но классы, это объекты нашего мышления. Вы не можете наблюдать класс в реальности, а только отдельные объекты этого класса. Например конкретный стул, на котором Вы сидите за компьютером. В питоне, конкретные объекты принадлежащие некоторому классу, называются экземплярами этого класса. Но принадлежит реальный объект какому либо классу, мы судим сравнивая его свойства со свойствами других объектов принадлежащих этому классу. У нашего разума есть такая особенность, когда мы начинаем думать о классе объектов в реальном мире, мы начинаем мысленно перебирать в памяти объекты, принадлежащие этому классу. И фиксировать те свойства, которые являются общими для всех этих реальных объектов.
И вот тут формируется в нашем мышлении такой специфический объект, который является собирательным объектом всех объектов принадлежащих конкретному классу. Он принадлежит данному классу, но содержит только те свойства, которые являются общими для всех реальных объектов данного класса. Я такой объект нашего мышления называю "Обобщенным объектом класса". С подобным объектом на строго научном уровне я впервые столкнулся изучая книгу "Теория множеств" группы французских математиков под псевдонимом "Бурбаки".
В питоне этот объект называется self.

Добавлено через 7 минут
Чеволек Павук, Подумайте, что Вам не понятно и задавайте вопросы. А я пока подберу несколько примеров использования ООП в программировании на питоне и поясню их.
1
Эксперт Python
4390 / 3252 / 1054
Регистрация: 28.10.2013
Сообщений: 8,375
Записей в блоге: 1
10.06.2020, 15:28 6
Цитата Сообщение от Чеволек Павук Посмотреть сообщение
Вот читаю и википедию, и на форумах,
Читайте документацию по языку. Там всегда описана модель языка и только она является истинной для конкретного языка.
https://docs.python.org/3/reference/datamodel.html
0
1289 / 757 / 172
Регистрация: 22.02.2018
Сообщений: 2,174
Записей в блоге: 3
10.06.2020, 17:07 7
Лучший ответ Сообщение было отмечено Чеволек Павук как решение

Решение

Чеволек Павук, Кстати я вам так и не объяснил, что является объектом в питоне.
Объект в питоне оформляется в виде некоторой области в оперативной памяти, содержащую некоторую структурированную информацию. Там кстати находится и информация к какому типу (классу) относится данный объект.
Каждая область памяти имеет свой адрес. То есть объект в оперативной памяти имеет свой уникальный адрес. Для того, что бы можно было работать с объектом (который в оперативной памяти), в питоне используются переменные. Но в отличие от других языков программирования, переменные содержат не объекты, а ссылки (адреса) на объекты расположенные в оперативной памяти.
Класс в питоне оформляется так же как объект в оперативной памяти, который в свою очередь может создавать объекты, являющиеся экземплярами этого класса. Технология создания экземпляра класса определена в объекте-классе. Имя класса, это имя переменной, которая содержит ссылку на объект-класс находящийся в оперативной памяти.

Добавлено через 56 минут
Чеволек Павук, Вот пример использования ООП для поиска пересечения двух прямоугольников, относящихся к прямоугольникам со сторонами параллельными осям координат.
Класс: Реализуйте класс Rectangle для описания прямоугольника, стороны которого параллельны осям координат.
Копирую оттуда сюда свой код.
Python
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
class Rectangle:
    def __init__(self, x, y, w, h):
        self.x = x
        self.y = y
        self.w = w
        self.h = h
    def intersection(self, other):
        if ((other.x>=self.x+self.w)or(other.y>=self.y+self.h)or
            (self.x>=other.x+other.w)or(self.y>=other.y+other.h)):
            print('None')
        else:
            R3 = Rectangle(0, 0, 0, 0)
            R3.x = max(self.x, other.x)
            R3.w = min(self.x + self.w, other.x + other.w) - R3.x
            R3.y = max(self.y, other.y)
            R3.h = min(self.y + self.h, other.y + other.h) - R3.y
            return R3
 
if __name__ == '__main__':
    rect1 = Rectangle(0.1, 0.2, 10.8, 10.07)
    rect2 = Rectangle(5.4, 5.8, 10.25, 10.45)
    if rect1.intersection(rect2):
        rect3 = rect1.intersection(rect2)
        print((rect3.x, rect3.y, rect3.w, rect3.h))
        print(rect3)
Рассмотрим как он работает. Для того, что бы работать с конкретными прямоугольниками мы создаем класс прямоугольников со сторонами параллельными осям.
Не знаю, кто как создает классы, (может только ориентируясь на документацию), я же делаю это так.
Мысленно или на листочке рассматриваю объекты этого класса, и ищу их общие свойства и общие действия, которые можно над ними осуществлять.
Кстати, когда я писал этот код, я рисовал реальные прямоугольники на листе бумаги.
Дальше рассуждаем. Любой прямоугольник на плоскости можно однозначно определить координатами левого нижнего угла (x, y), шириной w, высотой h и углом angle относительно оси координат x.
Тут в коде мое упущение, я не показал что у прямоугольника есть свойство angle и оно для этого класса равно нулю angle=0.
Но код работает правильно, так как я это свойство учел по умолчанию, когда писал метод intersection.
Хотя это свойство экземпляров данного класса можно было указать, разместив в перечне свойств координаты правого верхнего угла, указав их как вычисляемые через другие параметры.
Описывая метод пересечения текущего экземпляра класса (к которому применяется данный метод и который в методе обозначен как self) и другого экземпляра этого же класса (обозначенного как other), я на бумаге рассматривая расположение двух конкретных прямоугольников вывел формулы, по которым необходимо производить вычисления и использовал их в методе.

Добавлено через 5 минут
Мысль, которую я хочу донести. Когда Вы применяете ООП, то используйте объекты своего мышления в качестве объектов питона, описывая их по подобию объектов которые вы мысленно держите в голове. Так Вы сможите избежать многих ошибок используя при программировании ООП.
1
║XLR8║
1103 / 850 / 256
Регистрация: 25.07.2009
Сообщений: 4,179
Записей в блоге: 5
10.06.2020, 21:31 8
Цитата Сообщение от Чеволек Павук Посмотреть сообщение
Вот читаю и википедию, и на форумах, одни пишут, что класс, это шаблон по которому создается объект, другие пишут, что класс может быть или не быть объектом, третьи пишут, что класс-это всегда объект.
Есть математика, а есть сдача в магазине. В чём разница? Математика это идеи, концепции, а сдача в магазине это реализация.

ООП - это идея. Говоря о классах и объектах в ООП, вам надо взять книгу по ООП и выучить определения а не лазить по форумам и википедиям.

Поддержка ООП в разных ЯП (языках программирования) бывает разной. Чисто ООП ЯП можно по пальцам пересчитать, остальные в силу оптимизаций в угоду эффективности или по другим соображениям уходят от него на разное растояние.
Чтобы узнать о поддержке ООП вашим ЯП, изучайте ЯП. По книгам, а лучше по официальной документации, но точно не по форумам и википедиям.
1
1289 / 757 / 172
Регистрация: 22.02.2018
Сообщений: 2,174
Записей в блоге: 3
11.06.2020, 12:12 9
Лучший ответ Сообщение было отмечено Чеволек Павук как решение

Решение

Чеволек Павук, Вы своим вопросом запустили в моей голове мыслительный процесс по определению понятия "объект питона". Я написал, что
Цитата Сообщение от Viktorrus Посмотреть сообщение
Объект в питоне оформляется в виде некоторой области в оперативной памяти, содержащую некоторую структурированную информацию
и это действительно так. Но при этом не любая структурированная область оперативной памяти является объектом питона.
Поэтому продолжим разбираться, что же такое "объект питона".
Для начала определим несколько базовых понятий, что бы не уподобляться некоторым философам, которые ведут дискуссию не определившись с понятиями. Как говорится в поговорке "один про Фому, другой про Ерёму".

Литерал - это форма записи.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Если простыми словами, то литерал в Python – это простейший способ создания объектов. Например:
 
1 # числовой литерал
 
Python
 
"I'am a string" # строковый литерал
 
Python
 
[1, 2, 4, 6] # литерал списка
 
Python
 
{'a': 1, 'b': 2, 'c': 3} # литерал словаря
 
Но, поскольку такая запись не имеет смысла, так как с созданным объектом нужно что-то сделать или чему-то присвоить, то обычно все примеры в литературе пишутся в виде:
Python
 
a = 1
 
На этом месте у новичка уже глаза разбегаются – где здесь что. Так вот, слева – переменная, справа – литерал.
https://djangofan.ru/python-literals
https://ru.wikipedia.org/wiki/... %BA%D0%B0)

Тип или класс (начиная с версии 3.0 это синонимы)
В идеологии питона, как и в мыслительном процессе у человека, любой объект принадлежит некоторому классу (обычно одновременно многим классам).
В питоне есть такая функция (одновременно класс) с помощью которой мы можем определять что есть объект, а что нет. Если мы подставляем в эту функцию некоторый аргумент, то если аргумент является объектом, то функция возвращает название класса, которому принадлежит этот объект.
Python
1
2
3
type(obj)
 
obj : Объект, тип которого требуется определить.
Примеры
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> L = [1, 2, 3]
>>> type(L)
<class 'list'>
>>> type(type(L))
<class 'type'>
>>> type(type)
<class 'type'>
>>> type.__bases__
(<class 'object'>,)
>>> T = type(L)
>>> T
<class 'list'>
>>> type(T)
<class 'type'>
В примере мы видим метод class.__bases__ -> tuple , который возвращает кортеж суперклассов для данного класса.
Дело в том, что некоторые классы выглядят и ведут себя как функции. И мы часто называем их функциями, хотя они в питоне определены как классы. Например str(obj) -> str . Смотрим стандартную документацию
Python
1
2
3
4
5
6
 class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')
 
    Return a string version of object. If object is not provided, returns the empty string. Otherwise, the behavior of str() depends on whether encoding or errors is given, as follows.
 
    If neither encoding nor errors is given, str(object) returns object.__str__(), which is the “informal” or nicely printable string representation of object. For string objects, this is the string itself. If object does not have a __str__() method, then str() falls back to returning repr(object).
В версиях предшествующих 3.0 был введен класс object. Это класс, который является суперклассом для всех других классов. И все объекты являющиеся объектами какого либо класса, наследуют атрибуты класса object.
object это суперкласс самого верхнего уровня. В нем собраны все атрибуты, которые присутствуют (наследуются) для любого объекта питона. В версиях предшествующих 3.0 нужно было для использования класса object указывать его в качестве суперкласса. Начиная с версии 3.0 object является суперклассом для всех классов (нового стиля) в питоне по умолчанию и указывать его теперь не нужно.
Теперь можно дать определение понятию "объект" в питоне.
Все, что в питоне является экземпляром некоторого класса, называется "объектом".
Уф! Вроде все. Что не понятно, спрашивайте.

Добавлено через 13 минут
И вдогонку, выдержка из Лутца
"Однако теперь, когда я показал вам все эти способы проверки типа объекта, я должен заметить, что использование таких проверок в программном коде практически всегда является неверным решением (и отличительным признаком бывшего программиста на языке C, приступившего к программированию на языке Python).

Причина, почему такой подход считается неверным, станет понятна позднее, когда мы начнем писать более крупные блоки программного кода, такие как функции, – но это (пожалуй, самая) основная концепция языка Python. Наличие проверок на принадлежность объекта к тому или иному типу отрицательно сказывается на гибкости программного кода, потому что вы ограничиваете его работой с единственным типом данных. Без таких проверок ваш программный код может оказаться в состоянии работать с более широким диапазоном типов. Это связано с идей полиморфизма, о которой упоминалось ранее, и это основная причина отсутствия необходимости описывать типы переменных в языке Python. Как будет говориться далее, программный код на языке Python ориентируется на использование интерфейсов объектов (наборов поддерживаемых операций), а не их типов. Отсутствие заботы об определенных типах означает, что программный код автоматически может обслуживать большинство из них – допустимыми будут любые объекты с совместимыми интерфейсами независимо от конкретного типа. И хотя контроль типов поддерживается, а в редких случаях даже необходим, тем не менее, такой способ мышления чужд языку Python. Вы сами убедитесь, что полиморфизм является ключевой идеей, обеспечивающей успех использования Python.
"
Поясню о чем здесь говорится. Проверку принадлежности к классу type(obj) нужно делать только в интерактивном режиме, но не использовать в коде программы размещенном в файле.
1
11 / 8 / 3
Регистрация: 25.12.2018
Сообщений: 118
11.06.2020, 19:27  [ТС] 10
Вот бы все так на вопросы отвечали как Viktorrus, все понятным языком, все по полочкам. А что касается литературы, я ее мало читаю, потому что я запоминаю лишь то, что долгим и упорным трудом программирую, спасибо что все объяснили.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2020, 19:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Что это за объект?
На картинке показан интересующий объект - всплывающая подказка. Наверняка это что-то стандартное,...

Подскажите, что это за объект?
Есть такая директива и макросу warning передается аргумент disable со значение 4018. #pragma...

Объект TDictionary. Что такое ключ и что такое значение?
Из прочитанного в гугле понял что это нечто наподобие какого-то словаря: Коллекция пар...

Что это за знак >> прочитал что это сдвиг вправо? что он делает
int d=6, c=5,f; f = d &gt;&gt; c; cout&lt;&lt; f; вывод 0

Что такое монитор и что такое мьютекс? Это же разные вещи?
Здравствуйте. В разных айти-статьях по-разному используют эти термины, причём часто их путают друг...

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать?
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.