29Янв

Как определить класс: Как определить класс автомобиля: таблица с примерами

Содержание

Как определить класс медицинского изделия в ЕС и США?

Европейский Союз и США — два крупнейших рынка медицинских изделий. Ни один производитель не откажется вывести свою продукцию на один из них — а еще лучше на оба. Но, как известно, эти рынки строго регулируются. А значит, чтобы на них попасть, необходимо пройти определенные регуляторные процедуры.

Логично предположить, что разные медицинские изделия требуют несколько разных подходов. Было бы странно, если бы, скажем, к эластичному бинту и к вентрикулоперитонеальному шунту предъявлялись одинаковые требования. И здесь нам на помощь приходит классификация медицинских изделий, которая и определяет регуляторные пути, которыми придется пройти вашему продукту, прежде чем он окажется на рынке и принесет вашей компании миллионы.

Для того чтобы понять, какова будет процедура получения одобрения вашего продукта (а значит каковы будут сроки одобрения и каких затрат потребует этот процесс), необходимо определить, к какому классу риска он относится. О том, как это сделать, и пойдет речь в данной брошюре.

Скачать эту статью в PDF-формате

Здесь следует заметить, что американский и европейский подходы весьма существенно различаются. Мы разберем оба этих подхода и рассмотрим две классификации на конкретных примерах медицинских изделий. Но сначала давайте разберемся с важнейшим вопросом, над которым, почему-то, производители медицинских изделий стараются не задумываться. А именно: на каком этапе следует обращаться к теме классификации?

Когда следует задумываться о классификации вашего изделия

Многие компании, разрабатывающие медицинскую продукцию, откладывают определение класса продукта на конец разработки. Мол, не будем городить огород — сначала создадим изделие, а там уж определим, каким именно образом мы будем выводить его на рынок. Ответственно заявляем: это плохой подход!

Вам следует определить класс изделия как можно раньше — желательно в самом начале разработки, на этапе создания идеи, а затем контролировать возможные изменения класса продукта. Дело в том, что, если вы этого не сделаете, то в итоге вы можете получить изделие более высокого класса риска, чем вам представлялось вначале. А временные и финансовые затраты на регистрацию продукта по мере увеличения класса риска возрастают в геометрической прогрессии.

В результате вместо трех-четырех месяцев и нескольких тысяч долларов получение одобрения может потребовать пару лет и затрат, измеряемых сотнями тысяч. Вполне возможно, что компания окажется не готова к таким радикальным изменениям плана и бюджета разработки. И в итоге продукт, который мог бы продаваться в Европе и США и приносить компании колоссальные прибыли, навсегда остается на локальном рынке. А то и вовсе разработка будет остановлена.

Мораль проста: классификация медицинского изделия — это такой же управляемый элемент проекта разработки, как таймлайны, бюджет, качество или человеческие ресурсы. Но для того, чтобы управлять классификацией, вам необходимо определить класс будущего изделия как можно раньше и соответствующим образом планировать ресурсы.

Все это не значит, что в процессе разработки класс не может меняться. Вполне возможно, что класс финального продукта будет отличаться от класса, определенного исходно. Но это будет осознанное решение, принятое с учетом оценки проектных рисков и необходимости пересмотра ресурсов.

Классификация медицинских изделий в ЕС и США — сходства и различия

Как мы уже упомянули, регуляторные органы ЕС и США по-разному подходят к вопросам классификации медицинских изделий. В ЕС выделяю четыре класса медицинских изделий — I, IIa, IIb, III. В США — три: I, II, III.

Европейская классификация основана на правилах. Правила классификации приводятся в нормативном документе ЕС, известном как Medical Device Regulation (MDR), он же Регламент ЕС 2017/745 (Regulation (EU) 2017/745). Данный документ находится в свободном доступе.

Пояснение: В данной статье мы не рассматриваем европейское законодательство, касающееся изделий для in vitro диагностики. Правила классификации для продукции in vitro изложены в нормативном документе In Vitro Medical Device Regulation (IVDR) (Regualtion 2017/746).

Всего таких правил — 22. Чтобы определить класс вашего продукта, вам необходимо проверить его соответствие каждому из правил, начиная с Правила 1. Когда вы пройдете все применимые к вашему продукту правила, вам должно стать понятно, к какому классу относится ваш продукт.

Правила разбиты на 4 группы. Первая группа относится к неинвазивным изделиям. Вторая — к инвазивным. Третья — к активным (т.е. приводимым в движение каким-либо источником энергии). Четвертая — специальные правила, применимые к отдельным категориям продукции.

В отличие от европейских регуляторов (европейская система децентрализована, поэтому говорить о едином европейском регуляторе было бы некорректно), FDA определяет класс каждого изделия и хранит его индивидуальные данные в гигантской базе данных (Принципы классификации изложены в нормативе 21 CFR Part 860). Чтобы определить класс вашего изделия, вам необходимо обратиться к этой базе данных (доступ к ней имеет любой пользователь интернета) и найти продукт, аналогичный вашему. Класс вашего продукта будет соответствовать классу аналога. Звучит просто. Однако на практике все выглядит несколько сложнее.

Проблема в том, что база данных FDA действительно гигантская, и, чтобы найти в ней аналог вашего изделия, нужно использовать правильные поисковые слова. Поэтому определение класса медицинского изделия в США начинается с составления списка поисковых слов. При этом вам необходимо учитывать правильность написания и особенности американской терминологии, которая может отличаться от терминологии, к которой привыкли европейцы.

Классификация ЕС — примеры из практики

Чтобы получить представление о том, как определяется класс медицинского изделия в Европейском Союзе, обратимся к примерам двух продуктов. Пусть оба продукта относятся к области ортопедии: хирургическое сверло и ортопедическая стелька. Проверим оба продукта на соответствие правилам европейской классификации, изложенным в Приложении VIII Регламента ЕС 2017/745 (чтобы лучше понять то, о чем идет речь ниже, хорошо иметь текст приложения перед глазами).

Первые четыре правила относятся только к неинвазивным изделиям. Хирургическое сверло — инвазивное изделие. Поэтому для определения класса следует сразу перейти к разделу «Инвазивные изделия», который начинается с Правила 5.

Рис. 1. Сверло хирургическое

Правило 5 относится к инвазивным изделиям, проникающим в тело человека через естественные отверстия. Поэтому к сверлу оно также не применимо, поскольку добраться до кости, не нарушив целостности тканей невозможно. В свою очередь, Правило 6 относится к хирургическим инвазивным (нарушающим целостность тканей) изделиям, значит, сверло подпадает под действие этого правила.

Правило 6 гласит: все хирургические инвазивные изделия, применяемые краткосрочно (менее 60 минут) относятся к классу IIa. Соответственно, сверло должно было бы относиться к классу IIa. Однако у Правила 6 имеются оговорки, которые приводятся в виде списка под текстом правила. Одна из оговорок гласит, что все многоразовые хирургические инструменты относятся к классу I.

Это хорошая новость для производителя, но надо проверить изделие на соответствие и другим правилам. После проверки мы устанавливаем, что хирургическое сверло не подпадает под действие других правил. Соответственно данный продукт относится к классу I.

Изделия класса I делятся на обычный класс I, а также на стерильные изделия класса I и изделия класса I с измерительными функциями. Регуляторные процедуры для двух последних категорий несколько сложнее и строже.

Сверло не имеет измерительной функции — из этой категории мы можем его сразу исключить. Что касается стерильности — безусловно в условиях операционной сверло используется в стерильном состоянии. Но для классификации важно не это, а то, в каком состоянии оно поставляется покупателям.

Многоразовое сверло поставляется в нестерильном состоянии. Поэтому в категорию стерильных изделий класса I оно не попадает. В итоге получаем изделие, относящееся к самому низкому классу риска — класс I (нестерильные, без функции измерения).

Теперь определим класс ортопедической стельки. Это неинвазивное изделие. Соответственно, классификацию начинаем с раздела «Неинвазивные изделия», т.е. с Правила 1.

Рис. 2 Стелька ортопедическая

Правило 1 гласит: Все неинвазивные изделия относятся к классу I, если все дальнейшие правила неприменимы к ним. Проверяем все дальнейшие правила и убеждаемся, что к ортопедической стельке они неприменимы. Следовательно, стелька относится к классу I. Поскольку она не используется для измерений и не поставляется в стерильном виде, получаем класс 1 (нестерильные, без функции измерения).

Таким образом, и хирургическое сверло, и ортопедическая стелька относятся к классу I (нестерильные, без функции измерения). Регуляторная процедура для таких изделий будет самая простая. Фактически такой продукт может выводиться на рынок без разрешения регуляторов (нотифицированных организаций).

Тем не менее мы пришли к подобной классификации двух изделий несколько разными путями. Для хирургического сверла определяющим стало Правило 5, для ортопедической стельки — Правило 1. В соответствующем разделе технического файла класс изделия приводится с указанием определяющего правила.

Например:

Device: Drill bit
Class I (Rule 5)

Device: Orthotic shoe insert
Class I (Rule 1).

Классификация США — примеры из практики

Теперь рассмотрим классификацию медицинских изделий в США. К какому классу будут относиться, скажем, костные кусачки. Для того чтобы определить класс, нам потребуется найти продукт-аналог (predicate device), который был ранее зарегистрирован FDA и находится в базе данных регулятора.

Рис. 3 Кусачки костные

Для этого загружаем базу данных и осуществляем поиск по запросу «wire cutter». В итоге находим ранее зарегистрированный продукт, который может выступать в роли аналога.

Рис. 4 Результаты поиска в базе данных FDA — запрос «wire cutter» (источник FDA)

Продукт-аналог относится к классу I. Значит и ваш продукт относится к классу I. В базе данных FDA содержится и другая полезная информация о продукте-аналоге. Пройдя по ссылкам, приведенным в результатах поиска можно получить подробное описание продукта или его дженериковой группы, а также данные о проблемах с продуктом, отзывах и т.д. Изучив информацию, касающуюся продукта-аналога, можно установить является ли ваш продукт исключением из 510(k), а также должен ли он непременно производиться в условиях GMP или, опять же, является исключением.

Итак, полная классификация костных кусачек в США будет выглядеть следующим образом:
Device: Cutter, Wire
Class I. Product Code: HTW. Regulation No.: 888.4540

Аналогичным образом осуществляется классификация любого медицинского изделия. Например, уже знакомого нам хирургического сверла.

Рис. 5 Результаты поиска в базе данных FDA — запрос «drill bit» (источник FDA)

Как правило, поиск выдает несколько продуктов, которые могли бы выступить в роли аналога для вашего изделия. Выбор продукта-аналога осуществляется самим производителем, который отвечает за правильность этого выбора. При этом производитель должен руководствоваться характеристиками своего изделия и продуктов-аналогов.

Соответствие классов в ЕС и США

Мы рассмотрели примеры изделий, относящихся к классу I и в ЕС, и в США. Тем не менее классы изделий в двух данных юрисдикциях совпадают далеко не всегда. Европейские классы IIа и IIb совсем необязательно соответствуют американскому классу II. Точно так же могут не совпадать и классы I и III. Рассмотрим пример эндопротеза тазобедренного сустава.

Рис. 6 Эндопротез тазобедренного сустава

Правило 8 европейской классификации гласит: Все имплантируемые изделия, а также хирургические инвазивные изделия для долгосрочного применения относятся к классу IIb…

Далее приводится ряд оговорок, среди которых есть и такая: если только они не являются частичными или полными заменителями суставов. В последнем случае они относятся к классу III (за исключением винтов, клиньев, пластин). Соответственно, классификация эндопротеза тазобедренного сустава выглядит следующим образом: Class III (Rule 8).

В то же время, если мы проведем поиск по базе FDA, то получим следующую картину:

Рис. 7 Результаты поиска в базе данных FDA — запрос «hip prosthesis» (источник FDA)

Как мы видим, многие из потенциальных продуктов-аналогов относятся в США к классу II. Если ваш продукт по характеристикам соответствует подобному аналогу, то он также будет классифицирован как класс II. В результате возникнет ситуация, когда в Европе медицинское изделие попадает в класс III, а в США в класс II

Классификация медицинских изделий индивидуального назначения

Существует отдельная категория медицинских изделий, которые изготавливаются по индивидуальному заказу для каждого отдельного пациента (custom-made devices). В принципе, это означает, что такие изделия не являются результатом серийного производства. А потому на них не распространяются многие требования, предъявляемые к массово производимым изделиям.

Такие индивидуальные изделия не требуют получения одобрения регуляторных органов перед использованием в клинических условиях ни в ЕС, ни в США. Впрочем, это не означает, что медицинские изделия индивидуального назначения могут применяться без всякого контроля. И в Европе, и в США имеются особые регуляторные процедуры, распространяющиеся на эту категорию продуктов. И в обеих юрисдикциях индивидуальные изделия должны сопровождаться техническими файлами.

Документ, отражающий класс продукта и способ определения этого класса, является частью любого технического файла. Поэтому даже для медицинских изделий для индивидуального применения установление класса — необходимое условие. Ведь класс изделий определяет, среди прочего, степень внимания и осторожности, с которыми медицинский и технический персонал должен обращаться с ними.

И в этом есть смысл. Так, мы ранее говорили об эндопротезе тазобедренного сустава. Тот факт, что он в ЕС, а в ряде случаев и в США, относится к высшему классу риска должен заставить медицинский и технический персонал проявлять высшую степень осторожности при работе с ним.

Эндопротез может быть изготовлен и индивидуально для конкретного пациента. И тот факт, что продукт не является результатом серийного производства, нисколько не снижает риски, связанные с его применением. Определение класса позволяет взять эти риски под контроль и обращаться с изделием соответствующим образом.

Скачать эту статью в PDF-формате


1. European Union, 2017. Medical Device Regulation (Regulation (EU) 2017/745)

2. US Code of Federal Regulations Title 21 Part 860.


Мы здесь, чтобы помочь вам вывести вашу продукцию медицинского назначения на внешние рынки.

+7 (812) 9502691

[email protected]


Как определить класс водителя для страхования ОСАГО, узнать свой КБМ

Вы наверняка слышали о таком понятии, как коэффициент КБМ. Это фактор, который влияет на общую сумму выплат при покупке страхового полиса. И чтобы рассчитать это число, нужно узнать класс страхования водителя. Разобраться в этом вопросе может следующая информация.

Как определить класс водителя при ОСАГО

Правильное установление класса очень важно, ведь это влияет на определение стоимости страховки. Учитываются такие факторы:

  • тип транспортного средства. Отдельный тариф для каждого;
  • марка и модель так же играют большую роль;
  • место проживания. Статистика событий на дороге района, в котором водитель живет;
  • водительский стаж. Чем больше лет Вы за рулем, тем ниже коэффициент;
  • полные сведения о вождении.

Если по одному из пунктов есть проблемы, то это плохо влияет на определение класса по ОСАГО.

Какие классы существуют и как узнать класс водителя ОСАГО

Зависимо от поведения водителя на дороге, ему могут присвоить от 1 до 13. При отсутствии истории вождения автоматически ставиться первый класс. Он убирает из списка расчета все факторы, кроме последнего. Если не обращаться к компании, то с каждым годом класс растет. При присвоении 13 категории водитель получает 50% скидку по коэффициенту КБМ. Если же вы попадали в ситуации, попадающие под страховой случай, более, чем 4 раза за 1 год, то стоимость страховки увеличивается к 145% и присваивается класс М.

Чтобы самостоятельно рассчитать класс — обратитесь к РСА. У вас есть возможность узнать категорию вождения он-лайн. Стоит просто ввести ФИО, полную дату рождения, номер водительского документа. Вы увидите информацию о статусе вашего вождения и всю историю. База данных РСА вмещает в себе информацию не только о водителях, но также о многих страховых компаниях. Причем эти данные достоверны и актуальны, даже если водитель находится в стадии перестрахования. РСА предотвращает мошенничество, ведь вся история сохраняется и не пропадает.

Кроме того, страховые компании могут заполнять базу самостоятельно в случаях:

  1. При первом оформлении страхового полиса.
  2. При оформлении компенсации.
  3. При переходе от одной компании, к другой.
  4. Теперь изучим информацию о КБМ.

Что нужно знать о КБМ и как его рассчитать

У каждого водителя есть своя история вождения, по которой присваивается определенный класс. Но при учете «примерного поведения» на дороге ставиться коэффициент КБМ. Это единственный способ уменьшить сумму выплат по страховке. Раньше КБМ присваивался машине, с недавних пор — водителю. Это коэффициент с легкостью можно определить самостоятельно. Просто нужно обратится в базу РСА И сделать нужные пункты. Для помощи вам как можно лучше разобраться во всем, мы предоставим таблицу, в которой все понятно объясняется. Вот план расчета:

  • при первом оформлении страхового полиса водителю дают 3 класс;
  • дальше дело идет за тем, сколько раз за год вы попадали в страховую ситуацию. Если ни разу, то вам начисляют повышенный класс, одна — 1 класс, больше 2 — М;
  • при повышении с 3 до 4 категории, КБМ составляет 0.95.

Если вы будете вести себя хорошо на дороге, то класс будет повышаться, а коэффициент понижаться, и будет установлена скидка 5%. Вывод: чем лучше история вождения, тем меньше ты платишь. Не прибегать к нарушению ПДД — не сложно, а еще на этом можно сэкономить.

Таблица для определения класса опасности медицинского изделия

ТАБЛИЦА ДЛЯ ОПРЕДЕЛЕНИЯ КЛАССА ОПАСНОСТИ МЕДИЦИНСКОГО ИЗДЕЛИЯ
ПУНКТВОПРОС ПО МЕДИЦИНСКОМУ ИЗДЕЛИЮОТВЕТИТОГ / ВЫВОДПРИМЕЧАНИЕ / ПРАВИЛО
КЛАСС ОПАСНОСТИПЕРЕХОД К ПУНКТУ
1

Является ли МИ инвазивным?

ДА9

Неинвазивные МИ относят к классу 1, в случае, если не применяются другие правила.

НЕТ2
2Предназначено ли МИ для хранения органов, частей органов или хранения или введения в организм пациента крови, других жидкостей, газов, паров или тканей?ДА3Неинвазивные МИ, предназначенные для хранения органов, частей органов или хранения или введения в организм пациента крови, других жидкостей, газов, паров или тканей, относят к классу , в том числе если их используют с активным МИ класса или более высокого класса.
НЕТ4
3Используют ли МИ совместно с МИ класса 2а и более высокого класса?ДА32
НЕТ32
4Предназначено ли МИ для изменения биологического или физико-химического состава и свойств крови, других физиологических жидкостей или жидкостей, которые должны поступать в организм?ДА5

Неинвазивные МИ для изменения биологического или физико-химического состава и свойств крови, других физиологических жидкостей или жидкостей, которые должны поступать в организм, относят к классу . Однако если их действие заключается только в фильтрации, обработке на центрифуге или газо- или теплообмене, то указанные МИ относят к классу .

НЕТ6
5Заключается ли действие МИ только в фильтрации, обработке на центрифуге или газо- или теплообмене?ДА32
НЕТ32
6Соприкасается ли МИ с поврежденной кожей?ДА7Неинвазивные МИ, которые соприкасаются с поврежденной кожей:
→ относят к классу 1, если их используют как механические барьеры или для компрессии;
→ относят к классу , если их используют для ран, которые можно залечить только посредством вторичного заживления;
→ во всех иных случаях относят к классу , к ним также относят МИ, которые предназначены преимущественно для воздействия на микросреду ран.
НЕТ132
7Используют ли МИ как механический барьер, для компрессии или для абсорбции эксудатов?ДА132
НЕТ8
8

Используют ли МИ преимущественно для ран, которые можно вылечить только посредством вторичного лечения?

ДА32
НЕТ *32
9Является ли инвазивное МИ хирургическим?ДА15

Инвазивные МИ, за исключением хирургически инвазивных, применение которых связано с полостями в теле и которые не предназначены для присоединения к активному МИ, относят к классу:

1, если это МИ кратковременного применения;

, если это МИ временного применения. Если эти МИ временно применяют в полости рта до глотки, в слуховом проходе до барабанной перепонки или в полости носа, то их относят к классу 1;

, если это МИ длительного применения. Если эти МИ длительно применяют в полости рта до глотки, в слуховом проходе до барабанной перепонки или в полости носа и они не могут быть резорбируемы слизистой оболочкой, то их относят к классу .

Все инвазивные МИ, за исключением хирургически инвазивных, применение которых связано с полостями в теле и которые предназначены для присоединения к активному МИ класса или более высокого класса, относят к классу .

НЕТ10
10Предназначено ли МИ для присоединения к активному МИ класса 2а и более высокого класса?ДА32
НЕТ11
11Предназначено ли инвазивное МИ для кратковременного применения?ДА132
НЕТ12
12

Предназначено ли инвазивное МИ для временного применения?

ДА13
НЕТ14
13Применяют ли МИ в полости рта до глотки, в слуховом проходе до барабанной перепонки или в носовой полости?ДА132
НЕТ32
14Применяют ли МИ в полости рта до глотки, в слуховом проходе до барабанной перепонки или в носовой полости и не может ли МИ быть резорбируемо слизистой оболочкой?ДА32
НЕТ32
15Предназначено ли хирургическое инвазивное МИ для кратковременного применения?ДА16

Хирургически инвазивные МИ кратковременного применения относят к классу , однако если они:

предназначены для диагностики, наблюдения, контроля или коррекции патологий сердца, центральной системы кровообращения или центральной нервной системы в прямом контакте с органами или частями этих систем, то их относят к классу 3;

являются одноразовыми хирургическими инструментами, то их относят к классу 1;

предназначены для передачи энергии в форме ионизирующего излучения, то их относят к классу ;

предназначены для того, чтобы вызывать биологический эффект, рассасываться полностью или в значительной мере, то их относят к классу ;

предназначены для введения лекарственных средств через систему дозирования, использующую потенциально опасный метод введения, то их относят к классу .

НЕТ21
16

Предназначено ли МИ для диагностики, наблюдения, контроля, коррекции патологий сердца, центральной системы кровообращения в прямом контакте с этими частями тела?

ДА332
НЕТ17
17

Является ли хирургическое инвазивное МИ одноразовым хирургическим инструментом?

ДА132
НЕТ18
18Предназначено ли хирургическое инвазивное МИ для передачи энергии в форме ионизирующего излучения?ДА32
НЕТ19
19Предназначено ли хирургическое инвазивное МИ для того, чтобы вызывать биологический эффект или рассасываться полностью или в значительной мере?ДА32
НЕТ20
20Предназначено ли хирургическое инвазивное МИ для введения лекарственных средств через систему дозирования, использующую потенциально опасный метод введения?ДА32
НЕТ32
21Предназначено ли хирургическое инвазивное МИ для временного применения?ДА22

Хирургически инвазивные МИ временного применения относят к классу , однако если они:

предназначены для диагностики, наблюдения, контроля или коррекции патологий сердца или центральной системы кровообращения в прямом контакте с органами или частями этих систем, то их относят к классу 3;

непосредственно контактируют с центральной нервной системой, то их относят к классу 3;

предназначены для передачи энергии в форме ионизирующего излучения, то их относят к классу ;

предназначены для того, чтобы вызывать биологический эффект, рассасываться полностью или в значительной части, то их относят к классу 3;

претерпевают в теле химические изменения или вводят лекарственные средства, то их относят к классу , за исключением имплантируемых в зубы МИ.

НЕТ28
22Предназначено ли хирургическое инвазивное МИ для диагностики, наблюдения, контроля или коррекции патологий сердца или центральной системы кровообращения в прямом контакте с этими частями тела?ДА332
НЕТ23
23Используют ли хирургическое инвазивное МИ в прямом контакте с центральной нервной системой?ДА332
НЕТ24
24Предназначено ли хирургическое инвазивное МИ для передачи энергии в форме ионизирующего излучения?ДА32
НЕТ25
25Предназначено ли хирургическое инвазивное МИ для того, чтобы вызывать биологический эффект или рассасываться полностью или в значительной мере?ДА332
НЕТ26
26Претерпевает ли хирургическое инвазивное МИ в теле химические изменения или вводит лекарственные средства?ДА27
НЕТ32
27Является ли МИ имплантируемым в зубы?ДА32
НЕТ32
28Имплантируют ли МИ (инвазивное длительного применения или имплантируемое) в зубы?ДА32

Имплантируемые МИ, а также хирургически инвазивные МИ длительного применения, относят к классу , однако если они:

предназначены для имплантации в зубы, то их относят к классу ;

непосредственно контактируют с сердцем, центральной системой кровообращения или центральной нервной системой, то их относят к классу 3;

предназначены для того, чтобы вызывать биологический эффект или рассасываться полностью или в значительной мере, то их относят к классу 3;

претерпевают в теле химические изменения или вводят в организм пациента лекарственные средства, то их относят к классу 3 (за исключением имплантируемых в зубы МИ).

НЕТ29
29Используют ли МИ в прямом контакте с сердцем, центральной системой кровообращения или центральной нервной системой?ДА332
НЕТ30
30Предназначено ли МИ для того, чтобы вызывать биологический эффект или рассасываться полностью или в значительной мере?ДА332
НЕТ31
31Претерпевает ли МИ в теле химические изменения, за исключением таких МИ, которые должны быть имплантированы в зубы, или вводит ли МИ лекарственные средства?ДА332
НЕТ32
32Является ли МИ активным?ДА33

Активные терапевтические МИ, которые предназначены для передачи энергии или энергообмена, относят к классу . Однако если передача энергии человеческому организму или обмен энергией с ним представляет потенциальную опасность по причине характерных особенностей МИ с учетом воздействия на части тела, к которым прикладывают энергию (в том числе — активные МИ, предназначенные для создания ионизирующего излучения, лучевой терапии), то их относят к классу .

Все активные МИ, предназначенные для того, чтобы управлять активными терапевтическими МИ класса , относят к классу .

НЕТ46
33Является ли активное МИ терапевтическим?ДА34
НЕТ37
34Предназначено ли активное терапевтическое МИ для передачи энергии или энергообмена?ДА35
НЕТ36
35Представляет ли передача энергии человеческому организму или обмен энергией с ним потенциальную опасность по причине характерных особенностей МИ с учетом воздействия на части тела, к которым прикладывают энергию (в том числе — активные МИ, которые предназначены для создания ионизирующего излучения, лучевой терапии)?ДА44
НЕТ36
36Предназначено ли активное МИ для того, чтобы управлять (или контролировать) активными терапевтическими МИ класса 2б?ДА44
НЕТ44
37Является ли активное МИ диагностическим?ДА38

Активные диагностические МИ относят к классу , если они предназначены для:

передачи энергии, поглощаемой человеком, однако если функцией МИ является освещение тела пациента в видимом диапазоне спектра, то их относят к классу 1;

представления распределения радиофармакологических средств, введенных в организм пациента;

обеспечения прямой диагностики или контроля жизненно важных функций организма, однако если они предназначены для контроля жизненно важных физиологических параметров, изменения которых могли бы привести к непосредственной опасности для пациента, например изменение функции сердца, дыхания или активности центральной нервной системы, то их относят к классу .

Все активные МИ, предназначенные для того, чтобы управлять активными диагностическими МИ класса , относят к классу .

НЕТ44
38Предназначено ли активное диагностическое МИ для передачи энергии, поглощаемой человеком?ДА39
НЕТ40
39Предназначено ли активное диагностическое МИ для освещения пациента в видимом диапазоне спектра?ДА144
НЕТ44
40Предназначено ли активное диагностическое МИ для представления распределения радиофармакологических средств, введенных в организм пациента?ДА44
НЕТ41
41Предназначено ли активное диагностическое МИ для обеспечения прямой диагностики или контроля жизненно важных функций организма?ДА42
НЕТ43
42Предназначено ли активное диагностическое МИ специально для контроля жизненно важных физиологических параметров, изменения которых могли бы привести к непосредственной опасности для пациента, например изменение функции сердца, дыхания или активности центральной нервной системы?ДА44
НЕТ44
43Предназначено ли активное МИ для того, чтобы управлять активными диагностическими МИ класса 2б?ДА44
НЕТ44
44Предназначено ли активное МИ для введения в организм пациента лекарственных средств, физиологических жидкостей или других веществ и (или) выведения их из организма?ДА45

Активные МИ, предназначенные для введения в организм пациента лекарственных средств, физиологических жидкостей или других веществ и (или) выведения их из организма, относят к классу . Однако если метод введения (выведения) представляет собой потенциальную опасность с учетом вида соответствующих веществ, части организма и методики применения, то их относят к классу .

Все другие активные МИ относят к классу 1.

НЕТ146
45Представляет ли метод введения (выведения) (см. пункт 44) потенциальную опасность с учетом вида соответствующих веществ, части организма и вида применения?ДА46

Активные МИ, предназначенные для введения в организм пациента лекарственных средств, физиологических жидкостей или других веществ и (или) выведения их из организма, относят к классу . Однако если метод введения (выведения) представляет собой потенциальную опасность с учетом вида соответствующих веществ, части организма и методики применения, то их относят к классу .

НЕТ46
46Является ли МИ таким, что в его состав входит вещество, которое можно рассматривать как лекарственное или иное биологически активное средство и которое может воздействовать на человеческий организм в дополнение к воздействию МИ?ДА347

Все МИ, в составные части которых входит вещество, могущее представлять собой лекарственное или иное биологически активное средство и воздействовать на человеческий организм в дополнение к воздействию МИ, относят к классу 3.

НЕТ47
47Используют ли МИ для контроля зачатия или для защиты от передачи болезней половым путем?ДА48

Все МИ, предназначенные для контроля зачатия или для защиты от заболеваний, передаваемых половым путем, относят к классу , однако если они являются имплантируемыми или инвазивными МИ длительного применения, то их относят к классу 3.

НЕТ49
48Является ли МИ (пункт 47) имплантируемым или инвазивным длительного применения?ДА349
НЕТ49
49Предназначено ли МИ специально для дезинфекции МИ?ДА50

Все МИ, предназначенные для обеззараживания МИ, относят к классу , однако если они предназначены для очистки, промывки, дезинфекции контактных линз, то их относят к классу .

НЕТ51
50Предназначено ли МИ для дезинфекции, очистки, промывки или гидролиза контактных линз?ДА51
НЕТ51
51Используют ли неактивное МИ специально для изготовления диагностических рентгеновских снимков?ДА52

Неактивные МИ, используемые для получения диагностических рентгеновских снимков, относят к классу .

НЕТ52
52Произведено ли МИ с использованием омертвленных тканей животных или производных изделий?ДА53

Все МИ, которые были изготовлены с использованием омертвленных тканей животных или производных изделий, относят к классу 3, однако если они предназначены для того, чтобы соприкасаться только с неповрежденной кожей, то их относят к классу 1.

НЕТ54
53Предназначено ли МИ для того, чтобы соприкасаться только с неповрежденной кожей?ДА154
НЕТ354
54

Является ли МИ мешком с кровью, препаратом крови или кровезаменителем?

ДАКонецКонтейнеры для крови, препаратов крови и кровезаменителей относят к классу .
НЕТ1
К ним также относят МИ, которые предназначены преимущественно для воздействия на микросреду ран (см. пункт №8)

Как определить класс точности манометра

Манометр — измерительный прибор, который позволяет установить значение избыточного давления, действующего в трубопроводе или в рабочих частях различных видов оборудования. Такие приборы широко применяются в системах отопления, водоснабжения, газоснабжения, других инженерных сетях коммунального и промышленного назначения. В зависимости от условий эксплуатации измерителя существуют определенные ограничения по допустимому пределу его погрешности. Поэтому важно знать, как определить класс точности манометра.

Что такое класс точности манометра, и как его определить

Класс точности манометра является одной из основных величин, характеризующих прибор. Это процентное выражение максимально допустимая погрешность измерителя, приведенная к его диапазону измерений. Абсолютная погрешность представляет собой величину, которая характеризует отклонение показаний измерительного прибора от действительного значения давления. Также выделяют основную допустимую погрешность, которая представляет собой процентное выражение абсолютного допустимого значения отклонения от номинального значения. Именно с этой величиной связан класс точности.

Существует два типа измерителей давления — рабочие и образцовые. Рабочие применяются для практического измерения давления в трубопроводах и оборудовании. Образцовые — специальные измерители, которые служат для поверки показаний рабочих приборов и позволяют оценить степень их отклонения. Соответственно, образцовые манометры имеют минимальный класс точности.

Классы точности современных манометров регламентируются в соответствии с ГОСТ 2405-88 Они могут принимать следующие значения:

  • 0,15;

  • 0,25;

  • 0,4;

  • 0,6;

  • 1,0;

  • 1,5;

  • 2,5;

  • 4,0.

Таким образом, этот показатель имеет прямую зависимость с погрешностью. Чем он ниже, тем ниже максимальное отклонение, которое может давать измеритель давления, и наоборот. Соответственно, от этого параметра зависит, насколько точными являются показания измерителя. Высокое значение указывает на меньшую точность измерений, а низкое соответствует повышенной точности.  Чем ниже значение класса точности, тем более высокой является цена устройства.

Узнать этот параметр достаточно просто. Он указан на шкале в виде числового значения, перед которым размещаются литеры KL или CL. Значение указывается ниже последнего деления шкалы.

Указанная на приборе величина является номинальной. Чтобы определить фактический класс точности, нужно выполнить поверку и рассчитать его. Для этого проводят несколько измерений давления образцовым и рабочим манометром. После этого необходимо сравнить показания обоих измерителей, выявить максимальное фактическое отклонение. Затем остается только посчитать процент отклонения от диапазона измерений прибора.

Определение погрешности

Владельцев измерительных приборов интересует, прежде всего, величина максимальной погрешности, характерной для манометра. Она зависит не только от класса точности, но и от диапазона измерений. Таким образом, чтобы получить значение погрешности, нужно произвести некоторые вычисления.  Например, для манометра с диапазоном измерений, равным 6 МПа, и классом точности 1,5 погрешность будет рассчитываться по формуле 6*1,5/100=0,09 МПа.

Необходимо отметить, что таким способом можно посчитать только основную погрешность. Ее величина определяется идеальными условиями эксплуатации. На нее оказывают влияние только конструктивные характеристики, а также особенности сборки прибора, например, точность градуировки делений на шкале, сила трения в измерительном механизме. Однако эта величина может отличаться от фактической, поскольку существует также дополнительная погрешность, определяемая условиями, в которых эксплуатируется манометр. На нее может влиять вибрация трубопровода или оборудования, температура, уровень влажности и другие параметры.

Также точность измерения давления зависит от еще одной характеристики манометра — величины его вариации, которую определяют в ходе поверки. Это максимальная разница показаний измерителя, выявленная по результатам нескольких измерений. Величина вариации в значительной мере зависит от конструкции манометра, а именно от способа уравновешивания, которое может быть жидкостным (давлением столба жидкости) или механическим (пружиной). Механические манометры имеют более выраженную вариацию, что часто обусловлено дополнительным трением при плохой смазке или износе деталей, потере упругости пружины и другими факторами.

Как определить класс опасности отходов? – ИСУ

Каждое предприятие, деятельность которого сопряжена с производством любых отходов, обязано оформлять эти отходы согласно действующему законодательству. А это подразумевает под собой паспорт опасного отхода и все остальные сопутствующие документы. Но чтобы подготовить документальную базу нужно определить класс опасности отходов. Это обязательное условие, установленное законом.

Какие бывают классы опасности отходов?

Современное законодательство выделяет 5 классов опасности. Каждый следующий класс отличается от предыдущего степенью вредного влияния на природную среду. Классификация ведется от первого к пятому классу по степени убывания опасности. Сегодня существуют следующие классы отходов:

  1. Чрезвычайно опасные;
  2. Отходы высокой опасности;
  3. Умеренно опасные вещества;
  4. Отходы малой опасности;
  5. Неопасные отходы.

Под словосочетанием «уровень опасности» имеется в виду скорость восстановления окружающей среды после воздействия вещества. В случае с первым классом такого периода попросту не будет. Природная среда будет разрушена. А последний — пятый класс напротив, не изменит никак своим воздействием природу.

Процесс присвоения класса опасности отходам

Редко какой отход состоит только из одного вещества. Как правило, все отходы многокомпонентные. Поэтому, чтобы определить уровень влияния на природную среду отработанного вещества в целом, для начала определяют этот показатель для каждой его составляющей части по отдельности.

Для того чтобы выполнить эту сложную процедуру тщательно изучается сырье, используемое при производстве, и технологический процесс, в результате которого и появляются отходы. Сделать все это возможно только с помощью количественного хим. анализа, который проводят специалисты в данной области.

Кроме того, происходит определение коэффициента концентрации того или иного вредного вещества в отходе. Ведь даже самые опасные соединения имеют допустимые нормы, и уровень превышения таких норм должен быть установлен. Как правило, коэффициент концентрации вредных веществ измеряется в миллиграммах на метр кубический. А для каждого из веществ существуют значения при которых их концентрация соответствует тому или иному классу опасности.

Существуют специальные таблицы, где прописаны данные значения. И конечным пунктом в определении класса опасности является работа с такими таблицами. С помощью сложных математических расчетов табличные данные сверяются с полученными значениями, высчитываются всевозможные неточности и погрешности. И в конечном итоге отход получает соответствующий ему класс. Присвоенный класс отходу проверяют специальные контролирующие гос органы. Поэтому установить класс опасности наугад не получиться.

Как видите, оформить грамотно выброс отходов достаточно сложно. Но вы всегда можете обратиться к нам. У нас вы сможете оформить паспорт любого опасного отхода в короткие сроки, на выгодных условиях. И тогда вы сможете смело заниматься своим бизнесом, не опасаясь государственных санкций для своего предприятия.

как определить и повысить, рассчитать класс водителя на калькуляторе

При расчете полиса ОСАГО большое значение имеет класс водителя, который зависит от его коэффициента бонус-малус. На класс водителя влияет количество произошедших с ним страховых случаев за время действия страховки. Подробнее о том, как определить класс водителя по КБМ и о том, как он влияет на стоимость ОСАГО.

Какие есть классы страхования водителей?

Что такое класс в ОСАГО? Это показатель, который отражает число прошлых страховых случаев по ОСАГО. Его определяет коэффициент бонус-малус (КБМ). Если по вине водителя произошло ДТП и он использовал полис, то его класс падает. Если он не допускает аварий, то его класс растет.

Всего по КБМ существует 15 классов: М, 0 и с 1 по 13. Самый низкий из них — М, самый высокий — 13. В зависимости от класса, водитель может получить скидку или надбавку при оформлении полиса ОСАГО.

Как класс водителя влияет на стоимость ОСАГО?

КБМ имеет большое значение при расчете стоимости полиса ОСАГО. Чем выше класс, тем больше скидка, которую может получить страхователь. Напротив, при резком падении класса стоимость страховки может заметно вырасти. Таким образом государство стимулирует безаварийную езду — людям, которые не нарушают ПДД, доступны более выгодные условия ОСАГО.

Если водитель оформляет ОСАГО впервые, то ему присваивается класс 3 с коэффициентом 1. Минимальный коэффициент — за класс 13 — составляет 0,5, он позволяет уменьшить стоимость полиса наполовину. Максимальный коэффициент — за класс М — составляет 2,45, при нем стоимость страховки возрастает почти в два с половиной раза.

Как рассчитывается класс водителя по ОСАГО?

Класс водителя по ОСАГО считается на момент срока действия полиса. Он зависит от количества страховых случаев, произошедших за этот период. Если за срок действия страховки по вине водителя не произошло ни одной аварии, то класс водителя перейдет на следующую ступень. Если за это время произошел хотя бы один страховой случай, то класс откатится на несколько позиций назад. Чем больше было страховых случаев, тем сильнее откатится класс.

Например, водитель впервые оформил ОСАГО и получил класс 3 с коэффициентом 1. Если за срок действия полиса не будет страховых случаев, то ему будет присвоен класс 4 с коэффициентом 0,95 — следующий полис он оформит со скидок. Если за это время произойдет один страховой полис, то класс уменьшится до 1 с коэффициентом 1,55. Тогда следующий полис будет стоить заметно дороже.

Класс водителя действует в течение года после окончания срока действия полиса. Если в течение этого времени вы не оформите новую страховку, то показатель обнулится. В этом случае при оформлении нового полиса вам будет присвоен класс 3 с коэффициентом 1. То же самое происходит, если владелец меняет автомобиль. Если договор расторгнут досрочно, то за ним сохраняется тот класс, который действовал на дату оформления полиса.

Таблица классов

В таблице ниже вы узнаете о действующих классах КБМ, установленных для них коэффициентах и изменениях при наличии или отсутствии страховых случаев:

Класс на начало годового срока страхования Значение коэффициента (КБМ) Класс на окончание годового срока страхования
Без страховых выплат 1 страховая выплата 2 страховые выплаты 3 страховые выплаты 4 или более страховых выплат
М 2,45 0 М М М М
0 2,3 1 М М М М
1 1,55 2 М М М М
2 1,4 3 1 М М М
3 1 4 1 М М М
4 0,95 5 2 1 М М
5 0,9 6 3 1 М М
6 0,85 7 4 2 М М
7 0,8 8 4 2 М М
8 0,75 9 5 2 М М
9 0,7 10 5 2 1 М
10 0,65 11 6 3 1 М
11 0,6 12 6 3 1 М
12 0,55 13 6 3 1 М
13 0,5 13 7 3 1 М

Как узнать класс водителя по базе

Проще всего узнать класс водителя онлайн по официальной базе РСА. Для этого перейдите в раздел «ОСАГО» на сайте РСА. В меню слева выберите пункт «Расчет стоимости ОСАГО». Далее выберите пункт «Проверить КБМ». Подтвердите согласие на обработку персональных данных и нажмите кнопку «ОК».

.Далее заполните форму запроса — в ней нужно указать:

  • Дату заключения договора ОСАГО
  • Тип собственника — физическое или юридическое лицо
  • Тип полиса — с ограничением водителей или без него
  • ФИО и дату рождения водителя
  • Серию и номер водительского удостоверения (не паспорта)
  • Дату начала действия договора

После отправки заявки система определит наличие такого водителя в базе. Если она обнаружится, то система предоставит информацию о водителе и определит его класс на дату заключения договора.

Если человек не оформлял ОСАГО ранее (в том числе и не вписывался в полис как водитель) или оформляет впервые, то информации о нем в базе может не быть. Но таким водителям всегда присваивается класс 3 с коэффициентом 1.

Как повысить класс водителя

Класс водителя по КБМ повышается только при безаварийной езде. Чтобы повысить его, старайтесь не допускать страховых случаев по ОСАГО. Даже одна авария, возникшая по вашей вине, может очень сильно снизить класс.

Иногда информация о классе в базе РСА не обновляется, из-за чего действующая для него скидка не засчитывается. Об этом сразу нужно заявить менеджеру компании. Чтобы оспорить действующий коэффициент, требуется:

  • Через сервис АИС РСА запросить распечатку информации о текущем показателе. 
  • На основе данного документа обратиться в свою страховую компанию и подать соответствующее заявление
  • Проверить изменение класса в РСА 
  • Если страховка уже была оплачена по неверной цене — направить заявление в соответствующий банк о возврате денежных средств из-за неправильно рассчитанной стоимости
  • Если оспорить низкий класс не удалось, можно обращаться в суд

Даже если вы сменили страховщика, класс водителя не обнуляется. Он является постоянным показателем в течение всего стажа вождения. 

Возможные ошибки при определении класса

При расчете КБМ и определении класса водителя возможны различные ошибки. Рассмотрим наиболее частые проблемы при расчете класса: 

  • Класс может пропасть по вине сотрудников страховой компании. Ошибка может быть случайной или намеренной: часто менеджеры намеренно занижают класс, чтобы продать полис дороже.  Водители, которые не знают о существовании классов, могут переплачивать до 55% от стоимости
  • При покупке фальшивого полиса ОСАГО класс водителя не изменится. Если приобрести поддельный осаго, то информация в реестре не обновится и класс спустя годовой период может снизиться
  • Водитель должен быть вписан в ОСАГО в дату оформления договора, чтобы его класс засчитался. Если договор уже начал действовать, то у вписанного водителя коэффициент не улучшится. Если договор был расторгнут раньше срока, то класс водителя будет равен показателю на момент заключения договора
  • Класс может обнулиться после замены водительского удостоверения. КБМ привязан к номеру и серии прав — если они изменятся, то скидка не будет за ними закреплена. Чтобы этого избежать, заполните соответствующее заявление в отделении страховой компании

Вопрос-ответ

Как считается КБМ при оформлении полиса с несколькими водителями?

Если в полис вписано несколько водителей, то он будет считаться по самому молодому и неопытному из них. Соответственно, для расчета страховки будет браться его класс.

Обнуляется ли КБМ при изменении паспортных данных?

Нет — коэффициент привязывается к водительскому удостоверению, а не к паспортным данным. Но, чтобы избежать проблем, обязательно сообщите об изменении паспортных данных страховщику, чтобы он смог отправить новые сведения в РСА.

Учитывается ли класс водителя при расчете КАСКО?

Зависит от условий страховой компании — некоторые страховщики могут учитывать КБМ при расчете полиса КАСКО. Скидка для такого полиса от класса водителя часто ниже, чем для ОСАГО.

Источники

Юрий Муранов

Главный редактор #ВЗО. Работает на сайте с момента основания. Через Юрия проходят все тексты перед размещением на сайте. Быстро вникает в темы, на которые пишут авторы, включая финансовую, и следит за качеством публикуемых материалов.

[email protected]

(11 оценок, среднее: 4.9 из 5)

Как определить класс арматуры

Дата публикации: 04.12.2020
Последнее изменение: 18.01.2021

Строительство бетонных сооружений редко обходится без армирующего каркаса. Он представляет собой конструкцию из металлической проволоки (стержней), которая после заливки бетоном будет полностью скрыта внутри. Изготавливается арматура из стали, изготовленной согласно ГОСТ 5058-49, 380-88 (низкоуглеродистые, углеродистые марки). Если речь идет о композитном материале, то основой является полимерное (магматическое) волокно и органическая смола. Класс арматуры зашифрован в маркировке, например, А400 означает прут из низколегированной стали с примесью марганца (35ГС, 25Г2С, 32Г2Рпс).

Особенности и назначение

В зависимости от класса арматура будет использоваться в качестве закладного элемента бетонного основания, для распределения нагрузки, компенсации температурного расширения, для соединения отдельных элементов каркаса в единый массив. Например, берется марка А400С, где углеродный эквивалент стали не более 0,5%, если нужно получить сварное соединение (металл лучше варится по сравнению с той же маркой А400).

Назначение армирующего каркаса:

  • увеличение прочности при воздействии нагрузки на сжатие-растяжение;
  • снижение рисков появления трещин на поверхности, включая сквозные отверстия;
  • повышение устойчивости к нагрузкам в условиях резких перепадов температуры.

Сцепление с бетонной смесью обеспечивается специальным профилем поверхности прутков. Так, выпускается металлопрокат с тремя рисунками: кольцевым, серповидным, смешанным. Первый тип соответствует «советскому» ГОСТ, второй – западным стандартам, третий используется в бетонах повышенной прочности. В зависимости от рельефа стержня меняется устойчивость к поперечным или продольным нагрузкам.

Классификация

Сортамент арматурных стержней большой, без опыта в строительной сфере легко запутаться, какой именно металлопрокат покупать. Разные задачи требуют применения разнотипных элементов для получения задуманного эффекта. Так, продольные пруты чаще берутся толще поперечных, которые играют роль каркаса жесткости, тогда как основные нужны для придания прочности при нагрузках сгибания, растяжения.

 

Заметно упрощает выбор разделение арматуры на классы. В классификации участвует до десятка критериев, они вкратце отражены в маркировке – это марка стали, относительное удлинение после разрыва, временное сопротивление разрыву, диаметр (по профилю). Такого перечня достаточно для обывателя, специалисты используют большее количество только в расчетах проектов.

Таблица 1. Типовые характеристики арматуры

Класс арматуры

Диаметр профиля, мм

Временное сопротивление разрыву, Мпа

Относительное удлинение после разрыва, %

Марка стали

AI (A240)

6-40

373

25

Ст3кп, Ст3пс, Ст3сп

AII (A300)

10-40

40-80

490

19

Ст5сп, Ст5пс

18Г2С

ACII (AC300)

10-32

441

25

10ГТ

AIII (A400)

6-22

6-40

590

14

35ГС, 25Г2С

32Г2Рпс

AIV (A600)

10-32

883

6

80С, 20ХГ2Ц

AV (A800)

10-32

1030

7

23ХГ2Ц

 

Сечение арматурного стержня выбирается исходя из габаритов бетонной конструкции, требований по прочности. Измерение проводится по внешнему диаметру, с учетом профиля. Остальные параметры также влияют на конечные свойства ЖБИ изделия, в первую очередь, на нагрузочную способность. Так, временное сопротивление разрыву указывает предел прочности при растяжении конструкции. Показатель относительного удлинения после разрыва дает понимание по деформации в случае сильного повреждения металлического каркаса. Обычно стальные стержни возвращаются в состояние, близкое первоначальному, когда пропадает усилие растяжения.

Классы и их различия

Маркируется арматура двумя способами – производители сохраняют «советское» обозначение для тех, кто привык ориентироваться на старые справочники, а также указывают новый идентификатор, который упоминается в новых стандартах и используется на международном рынке. Такой подход упрощает чтение строительной документации, исключает разночтение информации. Иногда выбор осуществляется по внешним признакам. Например, гладким бывает в основном «первый класс».

 

Кодировка арматурного металлопроката начинается с литеры:

  • А – горячекатаная или холоднокатаная сталь;
  • В – холоднодеформированный материал;
  • К – канатная продукция.

В устаревшем стандарте арматура обозначается классами (римскими цифрами от I до VI). В новом же цифрами указывается показатель текучести стали в Мпа. Такой подход позволяет определять ее параметры без чтения специальной литературы. Каждый тип стержня имеет свое предназначение, поэтому характеристики важно учитывать еще на этапе проектирования, до покупки материала.

Выпускаются серии арматуры:

  1. А-I (A240) – монтажный прут с гладким профилем из стали марки Ст3СП, Ст3ПС, Ст3КП с сечением 4-40 мм.
  2. A-II (A300) – аналог предыдущей марки, но с рифленой поверхностью, из металла СТ5СП (ПС) или СТ18Г2С диаметром 10-80 мм, может производиться в виде проволоки, бухтами по 6-12 м.
  3. A-III (A400) – арматура для каркасов фундаментов плиточного, ленточного, свайного типа из стали марки 35ГС, 25Г2С, 32Г2Р сечением 6-40 мм (есть модификация с индексом «В» из металла холодного вытягивания).
  4. A-IV (A600) – материал для сварных конструкций, выпускаемый как в виде стержней по 6, 9, так и бухтами по 12 м, диаметром 10-32 мм из низколегированной холоднокатаной стали 80С, 20ХГ2Ц.
  5. A-V (A800) – продукция для сварных каркасов в стандартных, предварительно напряженных ЖБИ изделиях, из стали 23Х2Г2Т, сечением 6-32 мм.
  6. A-VI (A1000) – арматура повышенной прочности для производства плит под увеличенные пролеты, из металла марки 22Х2Г2АЮ, 22Х2Г2Р, 20Х2Г2СР, диаметром 6-32 мм.

После буквенно-цифровой маркировки в прайсах обычно указывается внешний диаметр, чтобы при подборе стройматериала было легко обойтись без осмотра продукции. Также возможно нанесение дополнительных символов, которые обозначают определенное покрытие стержня, например, для увеличения коррозионной стойкости.

Дополнительная маркировка

Так, согласно ГОСТ класс арматуры с индексом «Т» относится к металлопрокату с термообработкой прутка. Буква «К» указывает на противокоррозионный цинковый слой, а «СК» — возможность его сварки при сборке конструкций. Такое обозначение нужно для выбора способа монтажа, например, оцинкованные стержни предназначены для крепления «вязкой».

Цветовая маркировка арматуры из низколегированной стали:

  • А-IV – красный;
  • A-V – красный с зеленым;
  • A-VI – красный с синим.

Если стержни произведены из термоупрочненного металла, обозначение несколько иное:

  • АТ-III – белый с синим;
  • AT-IV – белый с желтым;
  • AT-4K – зеленый;
  • AT-V – синий;
  • AT-V-CK – белый с зеленым;
  • AT-VK – желтый с зеленым;
  • AT-VI – желтый;
  • AT – VIK – желтый с синим.

Если прутья изготовлены с соблюдением требований по маркировке различить их выйдет по виду. Визуально важен и рисунок профиля, он считается ключевым признаком после свойств материала. Правда, без буквенно-цифровой маркировки не обойтись. Например, для сварочных работ берут арматуру с индексом «С», тогда как остальные модификации подходят лишь для связки проволокой или соединения специальными муфтами.

Определение на глаз

Методика визуального определения класса арматуры пригодится тем, кому приходится иметь дело со строительными работами регулярно. Так, гладкий профиль всегда указывает на I-II категорию, стержни более высокого класса всегда выполняются с кольцевым, серповидным или смешанным рисунком. После примерного определения марки арматуры рекомендуется изучить диаметр прутка, вес, длину.

Промышленные изделия класса A-V и A-VI легко отличить по большому сечению, с укрупненным профилем. Они отличаются и увеличенной длины, повышенной массивностью. В остальном лучше ориентироваться на маркировку. Ведь тип покрытия или марку стали на взгляд не определить, как и пригодность для сварки.

 

классов — JavaScript | MDN

Классы — это шаблон для создания объектов. Они инкапсулируют данные с помощью кода для работы с этими данными. Классы в JS построены на прототипах, но также имеют некоторый синтаксис и семантику, которые не разделяются с семантикой класса ES5.

Объявления классов

Одним из способов определения класса является использование объявления класса . Чтобы объявить класс, вы используете ключевое слово class с именем класса (здесь «Прямоугольник»).

  class Rectangle {
  конструктор (высота, ширина) {
    это.высота = высота;
    this.width = width;
  }
}
  
Подъемник

Важное различие между объявлениями функций и объявлениями классов состоит в том, что объявления функций поднимаются, а объявления классов — нет. Сначала вам нужно объявить свой класс, а затем получить к нему доступ, иначе код, подобный следующему, вызовет ReferenceError :

  const p = новый прямоугольник ();

class Rectangle {}
  

Выражения класса

Выражение класса — это еще один способ определения класса.Выражения класса могут быть именованными или безымянными. Имя, данное выражению именованного класса, является локальным для тела класса. Однако к нему можно получить доступ через свойство name .

 
let Rectangle = class {
  конструктор (высота, ширина) {
    this.height = высота;
    this.width = width;
  }
};
console.log (Rectangle.name);



let Rectangle = class Rectangle2 {
  конструктор (высота, ширина) {
    this.height = высота;
    this.width = width;
  }
};
console.log (Rectangle.name);

  

Примечание. Выражения класса подчиняются тем же ограничениям подъема, которые описаны в разделе объявлений классов.

Тело класса — это часть, заключенная в фигурные скобки {} . Здесь вы определяете члены класса, такие как методы или конструктор.

Строгий режим

Тело класса выполняется в строгом режиме, то есть код, написанный здесь, подлежит более строгому синтаксису для повышения производительности, в противном случае будут возникать некоторые скрытые ошибки, а некоторые ключевые слова зарезервированы для будущих версий ECMAScript.

Конструктор

Метод конструктора — это специальный метод для создания и инициализации объекта, созданного с помощью класса .В классе может быть только один специальный метод с именем «конструктор». SyntaxError будет выдано, если класс содержит более одного экземпляра метода конструктора .

Конструктор может использовать ключевое слово super для вызова конструктора суперкласса.

Методы прототипа

См. Также определения методов.

  class Rectangle {
  конструктор (высота, ширина) {
    this.height = высота;
    this.width = width;
  }
  
  get area () {
    верни это.calcArea ();
  }
  
  calcArea () {
    вернуть this.height * this.width;
  }
}

const square = новый прямоугольник (10, 10);

console.log (квадратная область);
  

Генераторные методы

См. Также Итераторы и генераторы.

  class Polygon {
  constructor (... сторон) {
    this.sides = стороны;
  }
  
  * getSides () {
    for (const side of this.sides) {
      сторона уступки;
    }
  }
}

const pentagon = новый многоугольник (1,2,3,4,5);

console.log ([... pentagon.getSides ()]);
  

Статические методы и свойства

Ключевое слово static определяет статический метод или свойство для класса.Статические члены (свойства и методы) вызываются без создания экземпляра своего класса, а не может вызывать через экземпляр класса. Статические методы часто используются для создания служебных функций для приложения, тогда как статические свойства полезны для кешей, фиксированной конфигурации или любых других данных, которые не нужно реплицировать между экземплярами.

  класс Point {
  constructor (x, y) {
    this.x = x;
    this.y = y;
  }

  static displayName = "Point";
  статическое расстояние (a, b) {
    const dx = а.х - b.x;
    const dy = a.y - b.y;

    вернуть Math.hypot (dx, dy);
  }
}

const p1 = новая точка (5, 5);
const p2 = новая точка (10, 10);
p1.displayName;
p1.distance;
p2.displayName;
p2.distance;

console.log (Point.displayName);
console.log (Point.distance (p1, p2));
  

Связывание

этого с прототипом и статическими методами

Когда статический метод или метод прототипа вызывается без значения для этого , например, путем присвоения метода переменной и последующего ее вызова, это значение будет быть undefined внутри метода.Это поведение будет таким же, даже если директива "use strict" отсутствует, потому что код в пределах синтаксической границы тела class всегда выполняется в строгом режиме.

  class Animal {
  говорить() {
    вернуть это;
  }
  static eat () {
    вернуть это;
  }
}

let obj = new Animal ();
obj.speak ();
пусть говорят = obj.speak;
говорить();

Animal.eat ()
пусть есть = Animal.eat;
есть();
  

Если мы перепишем приведенное выше, используя традиционный синтаксис, основанный на функциях, в нестрогом режиме, то вызовов этого метода автоматически привязываются к начальному значению this , которое по умолчанию является глобальным объектом.В строгом режиме автосвязывания не произойдет; значение остается прежним.

  функция Animal () {}

Animal.prototype.speak = function () {
  вернуть это;
}

Animal.eat = function () {
  вернуть это;
}

let obj = new Animal ();
пусть говорят = obj.speak;
говорить();

пусть есть = Animal.eat;
есть();
  

Свойства экземпляра

Свойства экземпляра должны быть определены внутри методов класса:

  class Rectangle {
  конструктор (высота, ширина) {
    это.высота = высота;
    this.width = width;
  }
}
  

Объявления полей

Объявления общедоступных полей

С синтаксисом объявления поля JavaScript приведенный выше пример можно записать как:

  class Rectangle {
  высота = 0;
  ширина;
  конструктор (высота, ширина) {
    this.height = высота;
    this.width = width;
  }
}
  

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

Как видно выше, поля могут быть объявлены со значением по умолчанию или без него.

Дополнительные сведения см. В полях общедоступных классов.

Объявления частного поля

Используя частные поля, определение можно уточнить, как показано ниже.

  class Rectangle {
  #height = 0;
  #ширина;
  конструктор (высота, ширина) {
    это. # height = height;
    это. # width = width;
  }
}
  

Ссылка на частные поля извне класса - ошибка; они могут быть прочитаны или записаны только в теле класса.Определяя вещи, которые не видны за пределами класса, вы гарантируете, что пользователи ваших классов не могут зависеть от внутренних компонентов, которые могут меняться от версии к версии.

Примечание: Частные поля могут быть объявлены только заранее в объявлении поля.

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

Для получения дополнительной информации см. Функции частного класса.

Ключевое слово extends используется в объявлениях классов или выражениях классов для создания класса как потомка другого класса.

  class Animal {
  конструктор (имя) {
    this.name = имя;
  }

  говорить() {
    console.log (`$ {this.name} шумит .`);
  }
}

class Dog расширяет Animal {
  конструктор (имя) {
    супер (имя);
  }

  говорить() {
    console.log (`$ {this.name} barks.`);
  }
}

пусть d = новая собака ('Митци');
d.speak ();
  

Если в подклассе присутствует конструктор, он должен сначала вызвать super () перед использованием this.

Можно также расширить традиционные функциональные "классы":

  function Animal (name) {
  это.name = name;
}

Animal.prototype.speak = function () {
  console.log (`$ {this.name} шумит .`);
}

class Dog расширяет Animal {
  говорить() {
    console.log (`$ {this.name} barks.`);
  }
}

пусть d = новая собака ('Митци');
d.speak ();


  

Обратите внимание, что классы не могут расширять обычные (неконструируемые) объекты. Если вы хотите наследовать от обычного объекта, вы можете вместо этого использовать Object.setPrototypeOf () :

  const Animal = {
  говорить() {
    console.log (`$ {this.name} шумит. `);
  }
};

class Dog {
  конструктор (имя) {
    this.name = имя;
  }
}


Object.setPrototypeOf (Dog.prototype, Животное);

пусть d = новая собака ('Митци');
d.speak ();
  

Возможно, вы захотите вернуть объектов Array в производном классе массива MyArray . Шаблон разновидностей позволяет вам переопределить конструкторы по умолчанию.

Например, при использовании таких методов, как map () , которые возвращают конструктор по умолчанию, вы хотите, чтобы эти методы возвращали родительский объект Array вместо объекта MyArray .Это можно сделать с помощью символа Symbol.species :

  class MyArray extends Array {
  
  статический get [Symbol.species] () {return Array; }
}

пусть a = новый MyArray (1,2,3);
пусть mapped = a.map (x => x * x);

console.log (сопоставленный экземпляр MyArray);
console.log (сопоставленный экземпляр массива);
  

Ключевое слово super используется для вызова соответствующих методов суперкласса. Это одно из преимуществ перед наследованием на основе прототипов.

  class Cat {
  конструктор (имя) {
    это.name = name;
  }

  говорить() {
    console.log (`$ {this.name} шумит .`);
  }
}

class Lion extends Cat {
  говорить() {
    super.speak ();
    console.log (`$ {this.name} roars.`);
  }
}

пусть l = новый Лев ('Нечеткий');
l.speak ();


  

Абстрактные подклассы или примеси - это шаблоны для классов. Класс ECMAScript может иметь только один суперкласс, поэтому множественное наследование от классов инструментов, например, невозможно. Функциональность должна предоставляться суперклассом.

Функция с суперклассом в качестве входных данных и подклассом, расширяющим этот суперкласс в качестве выходных данных, может использоваться для реализации микширования в ECMAScript:

  let CalculatorMixin = Base => class extends Base {
  calc () {}
};

let randomizerMixin = Base => class extends Base {
  randomize () {}
};
  

Класс, который использует эти микшеры, может быть записан следующим образом:

  класс Foo {}
class Bar расширяет CalculatorMixin (randomizerMixin (Foo)) {}
  

Класс не может быть переопределен.Попытка сделать это приводит к ошибке SyntaxError .

Если вы экспериментируете с кодом в веб-браузере, например, в веб-консоли Firefox ( Tools > Web Developer > Web Console ), и вы дважды выполняете определение класса с тем же именем, вы получите SyntaxError: повторное объявление let ClassName; . (См. Дальнейшее обсуждение этой проблемы в ошибке 1428672.) Выполнение чего-то подобного в Chrome Developer Tools дает вам сообщение типа Uncaught SyntaxError: идентификатор ClassName уже был объявлен в : 1: 1 .

Таблицы BCD загружаются только в браузере

Классы (ООП) | Блестящая вики по математике и науке

Создание класса

В Python классы объявляются ключевым словом class , за которым следует имя класса. Оператор class определяет новый класс так же, как оператор def определяет новую функцию.

В следующем примере будет определен простой класс, определяющий пользователей Brilliant.

  класс brilliant Пользователь (объект):
  

Метод конструктора

После объявления имени класса программист должен определить метод конструктора .В Python это обозначается __init __ () . Функция __init__ принимает в качестве первого аргумента self , а затем любое количество аргументов по желанию программиста. В этом примере, описывающем блестящих пользователей, программист хочет знать имя, возраст и рейтинг каждого пользователя.

Имя __init __ () используется для «метода конструктора» класса. Хотя класс является планом для нового типа данных, программисту по-прежнему необходимо создавать значения этого типа данных, чтобы иметь что-то, что можно хранить в переменных или передавать функциям.

При вызове конструктор создает новый объект, запускает код в конструкторе и возвращает новый объект. Это строка user = brilliantUser ('Mursalin', 17, 4). Независимо от имени класса конструктор всегда называется __init__ .

Пока у нас

  класс brilliant Пользователь (объект):
    def __init __ (я, имя, возраст, рейтинг):
  

Вышеупомянутое определяет метод для класса brilliantUsers.Методы используются для функций, принадлежащих классу.

Переменные и тело __init__ Метод

Чтобы получить доступ к аргументам и связать их с конкретным экземпляром класса, в методе __init__ создайте переменные для каждого аргумента следующим образом: self.variableName = variableName .

Еще одним компонентом, связанным с классами, являются атрибутов . Атрибуты - это характеристики объекта.Метод __init __ () используется для инициализации атрибутов объекта. Так же, как методы - это функции, определенные в классе, атрибуты - это переменные, определенные в классе.

Каждый метод в определении класса начинается со ссылки на объект-экземпляр. По соглашению это называется «я».

В Python первым параметром для методов является self . Параметр self используется для создания переменных-членов. Внутри класса мы инициализируем любые переменные, которые могут иметь разные значения в зависимости от конкретного экземпляра класса, как self.Имя переменной . В примере с автомобилем нам может потребоваться доступ к переменной color для car_1 и переменной color для car_2 , и для того, чтобы назначить каждой машине свое собственное значение color , нам понадобится self .

Тело функции-конструктора для примера пользователей Brilliant выглядит следующим образом:

  self.name = name
self.age = возраст
self.rating = рейтинг
  

Этот код создает переменные-члены для объекта, созданного конструктором.Переменные-члены будут начинаться с self , чтобы показать, что они являются переменными-членами, принадлежащими объекту, а не просто обычными локальными переменными в методе.

В целом класс для описания блестящих пользователей выглядит так:

  класс brilliant Пользователь (объект):
    def __init __ (я, имя, возраст, рейтинг):
      self.name = имя
      self.age = возраст
      self.rating = рейтинг

# Мы можем создать блестящий объект для пользователя


user = brilliantUser ('Мурсалин', 17, 4)
  

Создание экземпляра

Экземпляр - это особый объект, созданный из определенного класса.Чтобы создать экземпляры класса, вызовите класс, используя имя класса и передайте любые аргументы, которые принимает его метод __init__ - в этом примере метод __init__ принимает имя , возраст и рейтинг .

  user = brilliantUser ('Мурсалин', 17, 4)
  

Здесь мы создаем новый экземпляр класса brilliantUser . Или, другими словами, мы создаем экземпляр класса brilliantUser .

классов Python


Классы / объекты Python

Python - это объектно-ориентированный язык программирования.

Практически все в Python - это объект со своими свойствами и методами.

Класс похож на конструктор объекта или «план» для создания объектов.


Создать класс

Чтобы создать класс, используйте ключевое слово class :

Пример

Создайте класс MyClass со свойством x:

класс MyClass:
x = 5

Попробуй сам "

Создать объект

Теперь мы можем использовать класс MyClass для создания объектов:

Пример

Создайте объект с именем p1 и распечатайте значение x:

p1 = MyClass ()
печать (p1.х)

Попробуй сам "

Функция __init __ ()

Приведенные выше примеры представляют собой классы и объекты в их простейшей форме и являются не очень полезен в реальных приложениях.

Чтобы понять значение классов, мы должны понимать встроенный __init __ () функция.

Все классы имеют функцию __init __ (), которая всегда выполняется, когда занятие инициируется.

Используйте функцию __init __ () для присвоения значений свойствам объекта или другим операции, которые необходимо выполнить, когда объект создается:

Пример

Создайте класс с именем Person, используйте функцию __init __ () для присвоения значений для имени и возраста:

class Person:
def __init __ (я, имя, возраст):
себя.name = name
self.age = age

p1 = Person ("Джон", 36)

print (p1.name)
print (p1.age)

Попробуй сам "

Примечание: Функция __init __ () вызывается автоматически каждый раз, когда класс используется для создания нового объекта.



Методы объекта

Объекты также могут содержать методы. Методы в объектах - это функции, которые принадлежат объекту.

Создадим метод в классе Person:

Пример

Вставьте функцию, которая печатает приветствие, и выполните ее для объекта p1:

class Person:
def __init __ (я, имя, возраст):
себя.name = name
self.age = age

def myfunc (self):
print («Привет, меня зовут» + self.name)

p1 = Person («Джон», 36)
p1.myfunc ()

Попробуй сам "

Примечание: Параметр self является ссылкой на текущий экземпляр класса и используется для доступа к переменным, принадлежащим этому классу.


Параметр себя

Параметр self является ссылкой на текущий экземпляр класса и используется для доступа к переменным, принадлежащим этому классу.

Необязательно называть self , вы можете назовите его как хотите, но он должен быть первым параметром любой функции в классе:

Пример

Используйте слова mysillyobject и abc вместо self :

класс Person:
def __init __ (mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age

def myfunc (abc):
print ("Привет, меня зовут" + abc.имя)

p1 = Человек ("Джон", 36)
p1.myfunc ()

Попробуй сам "

Изменить свойства объекта

Вы можете изменять свойства объектов, например:


Удалить свойства объекта

Вы можете удалять свойства объектов с помощью дель ключевое слово:


Удалить объекты

Вы можете удалять объекты с помощью ключевого слова del :


Пропуск Заявление

определения класса не могут быть пустыми, но если у вас по какой-то причине есть определение класса без содержимого, введите оператор pass , чтобы избежать ошибки.



Определение классов в Python

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

  >>> число = 20
>>> тип (число)
<класс 'int'>
>>> s = "Python"
>>> тип (ы)
<класс 'str'>
  

Определение класса

Класс в Python можно определить с помощью ключевого слова class .

  класс :
    
    
    ..
    <заявлениеN>
  

Согласно синтаксису выше, класс определяется с помощью ключевого слова class , за которым следует имя класса и оператора : после имени класса, что позволяет продолжить в следующей строке с отступом для определения членов класса. Ниже перечислены члены класса.

  1. Атрибуты класса
  2. Конструктор
  3. Атрибуты экземпляра
  4. Характеристики
  5. Методы класса

Класс также можно определить без каких-либо членов.В следующем примере определяется пустой класс с использованием ключевого слова pass .

При создании экземпляра класса используется обозначение функций. Чтобы создать объект класса, просто вызовите класс, например функцию без параметров, которая возвращает новый объект класса, как показано ниже.

Выше Student () возвращает объект класса Student , который назначен локальной переменной std .Класс Student - пустой класс, потому что он не содержит никаких членов.

Атрибуты класса

Атрибуты класса - это переменные, определенные непосредственно в классе, которые используются всеми объектами класса. Доступ к атрибутам класса можно получить как по имени класса, так и по объектам.

  класс Студент:
    schoolName = 'Школа XYZ'
  

Выше schoolName - это атрибут класса, определенный внутри класса.Значение schoolName останется неизменным для всех объектов, если не будет изменено явно.

  >>> Student.schoolName
"Школа XYZ"
>>> std = Студент ()
>>> std.schoolName
"Школа XYZ"
  

Как видите, к атрибуту класса обращается Student.schoolName , а также std.schoolName . Изменение значения атрибута класса с использованием имени класса изменит его во всех экземплярах.Однако изменение значения атрибута класса с использованием экземпляра не отразится на других экземплярах или классе.

  >>> Student.schoolName = 'ABC School' # изменить значение атрибута, используя имя класса
>>> std = Студент ()
>>> std.schoolName
Значение "ABC School" # изменено для всех экземпляров.
>>> std.schoolName = 'My School' # изменение атрибута экземпляра
>>> std.schoolName
'Моя школа'
>>> Студент.schoolName # изменение уровня экземпляра не отражено в атрибуте класса
"Школа ABC"
>>> std2 = Студент ()
>>> std2.schoolName
"Школа ABC"
  

В следующем примере демонстрируется использование атрибута класса count .

  класс Студент:
    count = 0
    def __init __ (сам):
        Ученик.count + = 1
  

В приведенном выше примере count - это атрибут в классе Student. Каждый раз, когда создается новый объект, значение count увеличивается на 1. Теперь вы можете получить доступ к атрибуту count после создания объектов, как показано ниже.

  >>> std1 = Студент ()
>>> Студент.считать
1
>>> std2 = Студент ()
>>> Student.count
2
  

Конструктор

В Python метод конструктора вызывается автоматически всякий раз, когда создается новый объект класса, так же, как конструкторы в C # или Java. Конструктор должен иметь специальное имя __init __ () и специальный параметр self .

Первым параметром каждого метода в классе должен быть self , который ссылается на вызывающий объект.Однако вы можете дать любое имя первому параметру, не обязательно self .

В следующем примере определяется конструктор.

  класс Студент:
    def __init __ (self): # метод конструктора
        print ('Конструктор вызван')
  

Теперь, когда вы создаете объект класса Student , будет вызываться метод конструктора __init __ () , как показано ниже.

  >>> s1 = Студент ()
Конструктор вызван
>>> s2 = Студент ()
Конструктор вызван
  

Конструктор в Python используется для определения атрибутов экземпляра и присвоения им значений.

Атрибуты экземпляра

Атрибуты экземпляра - это атрибуты или свойства, прикрепленные к экземпляру класса.Атрибуты экземпляра определяются в конструкторе.

В следующем примере в конструкторе определяются атрибуты экземпляра name и age .

  класс Студент:
    schoolName = 'XYZ School' # атрибут класса

    def __init __ (self): # конструктор
        себя.name = '' # атрибут экземпляра
        self.age = 0 # атрибут экземпляра
  

Доступ к атрибуту экземпляра можно получить, используя точечную нотацию: [имя экземпляра]. [Имя атрибута] , как показано ниже.

  >>> std = Студент ()
>>> std.name
''
>>> std.age
0
  

Вы можете установить значение атрибутов, используя точечную нотацию, как показано ниже.

  >>> std = Студент ()
>>> std.name = "Bill" # присвоить значение атрибуту экземпляра
>>> std.age = 25 # присвоить значение атрибуту экземпляра
>>> std.name # значение атрибута экземпляра доступа
Билл
>>> std.age # значение доступа к атрибуту экземпляра
25
  

Вы можете указать значения атрибутов экземпляра через конструктор.Следующий конструктор включает параметры name и age, кроме параметра self .

  класс Студент:
    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст
  

Теперь вы можете указать значения при создании экземпляра, как показано ниже.

  >>> std = Студент ('Bill', 25)
>>> std.name
'Билл'
>>> std.age
25
  

Вам не нужно указывать значение параметра self . Он будет назначен внутри Python.

Вы также можете установить значения по умолчанию для атрибутов экземпляра.Следующий код устанавливает значения по умолчанию для параметров конструктора. Итак, если значения не указаны при создании объекта, значения будут присвоены последним.

  класс Студент:
    def __init __ (self, name = "Гость", возраст = 25)
        self.name = имя
        self.age = возраст
  

Теперь вы можете создать объект со значениями по умолчанию, как показано ниже.

  >>> std = Студент ()
>>> std.name
'Гость'
>>> std.age
25
  

Посетите атрибуты класса и атрибуты экземпляра в Python для получения дополнительной информации.

Свойства класса

В Python свойство в классе можно определить с помощью функции property ().

Метод property () в Python предоставляет интерфейс для атрибутов экземпляра. Он инкапсулирует атрибуты экземпляра и предоставляет свойство, как в Java и C #.

Метод property () принимает методы get, set и delete в качестве аргументов и возвращает объект класса property .

В следующем примере показано, как создать свойство в Python с помощью функции property () .

  класс Студент:
    def __init __ (сам):
        сам .__ имя = ''
    def setname (self, name):
        print ('setname () называется')
        self .__ name = имя
    def getname (сам):
        print ('getname () называется')
        вернуть self .__ name
    имя = свойство (getname, setname)
  

В приведенном выше примере свойство (getname, setname) возвращает объект свойства и присваивает ему name .Таким образом, свойство name скрывает атрибут частного экземпляра __name . Доступ к свойству name осуществляется напрямую, но внутренне оно вызывает метод getname () или setname () , как показано ниже.

  >>> std = Студент ()
>>> std.name = "Стив"
setname () называется
>>> std.name
getname () называется
'Стив'
  

Рекомендуется использовать декоратор свойств вместо метода property () .

Методы класса

Вы можете определить сколько угодно методов в классе, используя ключевое слово def . Каждый метод должен иметь первый параметр, обычно называемый self , который относится к вызывающему экземпляру.

  класс Студент:
    def displayInfo (self): # метод класса
        print ('Информация о студенте')
  

Self - это просто условное имя для первого аргумента метода в классе.Метод, определенный как mymethod (self, a, b) , должен вызываться как x.mymethod (a, b) для объекта x класса.

Вышеупомянутый метод класса может быть вызван как обычная функция, как показано ниже.

  >>> std = Студент ()
>>> std.displayInfo ()
"Информация для студентов"
  

Первый параметр метода не обязательно называть self .Вы можете дать любое имя, которое относится к экземпляру вызывающего метода. Следующий метод displayInfo () называет первый параметр как obj вместо self , и он отлично работает.

  класс Студент:
    def displayInfo (obj): # метод класса
        print ('Информация о студенте')
  

Определение метода в классе без параметра self вызовет исключение при вызове метода.

  класс Студент:
    def displayInfo (): # метод без параметра self
        print ('Информация о студенте')
  
  >>> std = Студент ()
>>> std.displayInfo ()
Отслеживание (последний вызов последний):
std.displayInfo ()
TypeError: displayInfo () принимает 0 позиционных аргументов, но дан 1
  

Метод может получить доступ к атрибутам экземпляра с помощью параметра self .

  класс Студент:
    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст
    def displayInfo (self): # метод класса
        print ('Имя ученика:', self.name, ', Age:', self.age)
  

Теперь вы можете вызвать метод, как показано ниже.

  >>> std = Студент ('Стив', 25)
>>> std.displayInfo ()
Имя студента: Стив, возраст: 25
  

Удаление атрибута, объекта, класса

Вы можете удалить атрибуты, объекты или сам класс, используя ключевое слово del , как показано ниже.

  >>> std = Студент ('Стив', 25)
>>> del std.name # удаляемый атрибут
>>> std.name
Отслеживание (последний вызов последний):
Файл "", строка 1, в 
std.name
AttributeError: объект "Студент" не имеет атрибута "имя"
>>> del std # удаление объекта
>>> std.name
Отслеживание (последний вызов последний):
Файл "", строка 1, в 
std.name
NameError: имя 'std' не определено
>>> del Student # удаление класса
>>> std = Студент ('Стив', 25)
Отслеживание (последний вызов последний):
Файл "", строка 1, в 
std = Студент ()
NameError: имя "Студент" не определено
  

классов и объектов Python [с примерами]

Объекты и классы Python

Python - это объектно-ориентированный язык программирования.В отличие от процедурно-ориентированного программирования, где основной упор делается на функции, объектно-ориентированное программирование делает упор на объекты.

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

Мы можем думать о классе как об эскизе (прототипе) дома. Он содержит все подробности о этажах, дверях, окнах и т. Д. На основе этих описаний мы строим дом. Дом - это объект.

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


Определение класса в Python

Как и определения функций в Python начинаются с ключевого слова def, определения классов начинаются с ключевого слова class.

Первая строка внутри класса называется docstring и содержит краткое описание класса.Хотя это не обязательно, это настоятельно рекомендуется.

Вот простое определение класса.

  класс MyNewClass:
    '' 'Это строка документации. Я создал новый класс ''
    пройти  

Класс создает новое локальное пространство имен, в котором определены все его атрибуты. Атрибуты могут быть данными или функциями.

В нем также есть специальные атрибуты, которые начинаются с двойного подчеркивания __ . Например, __doc__ дает нам строку документации этого класса.

Как только мы определяем класс, создается новый объект класса с тем же именем. Этот объект класса позволяет нам получать доступ к различным атрибутам, а также создавать экземпляры новых объектов этого класса.

  класс Человек:
    "Это человек класса"
    возраст = 10

    def greet (сам):
        print ('Привет')


# Вывод: 10
печать (Person.age)

# Вывод: <функция Person.greet>
печать (Person.greet)

# Вывод: «Это класс человека»
print (Лицо .__ doc__)  

Выход

  10
<функция Person.приветствовать по адресу 0x7fc78c6e8160>
Это человек класса  

Создание объекта в Python

Мы увидели, что объект класса может использоваться для доступа к различным атрибутам.

Его также можно использовать для создания новых экземпляров объекта (создания экземпляров) этого класса. Процедура создания объекта аналогична вызову функции.

  >>> harry = Person ()  

Это создаст новый экземпляр объекта с именем harry .Мы можем получить доступ к атрибутам объектов, используя префикс имени объекта.

Атрибуты могут быть данными или методом. Методы объекта - это соответствующие функции этого класса.

Это означает, что, поскольку Person.greet является объектом функции (атрибутом класса), Person.greet будет объектом метода.

  класс Человек:
    "Это человек класса"
    возраст = 10

    def greet (сам):
        print ('Привет')


# создать новый объект класса Person
harry = Человек ()

# Вывод: <функция Person.приветствовать>
печать (Person.greet)

# Вывод: <связанный метод Person.greet из <__ main __. Объект Person >>
печать (harry.greet)

# Вызов метода объекта greet ()
# Вывод: Привет
harry.greet ()  

Выход

  <функция Person.greet at 0x7fd288e4e160>
<связанный метод Person.greet объекта <__ main __. Person в 0x7fd288e9fa30 >>
Привет  

Возможно, вы заметили параметр self в определении функции внутри класса, но мы назвали этот метод просто как harry.greet () без аргументов. Это все еще работало.

Это потому, что всякий раз, когда объект вызывает свой метод, сам объект передается в качестве первого аргумента. Итак, harry.greet () переводится в Person.greet (harry) .

В общем случае вызов метода со списком из n аргументов эквивалентен вызову соответствующей функции со списком аргументов, который создается путем вставки объекта метода перед первым аргументом.

По этим причинам первым аргументом функции в классе должен быть сам объект.Это условно называется self . Его можно назвать иначе, но мы настоятельно рекомендуем следовать соглашению.

Теперь вы должны быть знакомы с объектом класса, объектом экземпляра, объектом функции, объектом метода и их различиями.


Конструкторы в Python

Функции класса, начинающиеся с двойного подчеркивания __ , называются специальными функциями, поскольку они имеют особое значение.

Особый интерес представляет функция __init __ () .Эта специальная функция вызывается всякий раз, когда создается новый объект этого класса.

Этот тип функций также называется конструкторами в объектно-ориентированном программировании (ООП). Обычно мы используем его для инициализации всех переменных.

  класс ComplexNumber:
    def __init __ (self, r = 0, i = 0):
        self.real = r
        self.imag = я

    def get_data (сам):
        print (f '{self.real} + {self.imag} j')


# Создаем новый объект ComplexNumber
num1 = Комплексное число (2, 3)

# Вызвать метод get_data ()
# Вывод: 2 + 3j
число1.получить данные()

# Создаем еще один объект ComplexNumber
# и создайте новый атрибут attr
num2 = Комплексное число (5)
num2.attr = 10

# Вывод: (5, 0, 10)
print ((num2.real, num2.imag, num2.attr))

# но объект c1 не имеет атрибута attr
# AttributeError: объект 'ComplexNumber' не имеет атрибута 'attr'
print (num1.attr)  

Выход

  2 + 3j
(5, 0, 10)
Отслеживание (последний вызов последний):
  Файл «<строка>», строка 27, в <модуле>
    печать (число1.attr)
AttributeError: объект «ComplexNumber» не имеет атрибута «attr»  

В приведенном выше примере мы определили новый класс для представления комплексных чисел. Он имеет две функции: __init __ () для инициализации переменных (по умолчанию - ноль) и get_data () для правильного отображения числа.

Интересный момент, который следует отметить в предыдущем шаге, заключается в том, что атрибуты объекта могут быть созданы "на лету". Мы создали новый атрибут attr для объекта num2 и также прочитали его.Но это не создает этот атрибут для объекта num1 .


Удаление атрибутов и объектов

Любой атрибут объекта можно удалить в любое время с помощью оператора del . Попробуйте выполнить следующие действия в оболочке Python, чтобы увидеть результат.

  >>> число1 = Комплексное число (2,3)
>>> del num1.imag
>>> num1.get_data ()
Отслеживание (последний вызов последний):
...
AttributeError: объект 'ComplexNumber' не имеет атрибута 'imag'

>>> del ComplexNumber.получить данные
>>> num1.get_data ()
Отслеживание (последний вызов последний):
...
AttributeError: объект «ComplexNumber» не имеет атрибута «get_data»  

Мы можем даже удалить сам объект, используя оператор del.

  >>> c1 = Комплексное число (1,3)
>>> дель c1
>>> c1
Отслеживание (последний вызов последний):
...
NameError: имя 'c1' не определено  

На самом деле все намного сложнее. Когда мы выполняем c1 = ComplexNumber (1,3) , в памяти создается новый объект-экземпляр, и с ним связывается имя c1 .

По команде del c1 эта привязка удаляется, а имя c1 удаляется из соответствующего пространства имен. Однако объект продолжает существовать в памяти, и если к нему не привязано другое имя, он позже автоматически уничтожается.

Это автоматическое уничтожение объектов, на которые нет ссылок, в Python также называется сборкой мусора.

Удаление объектов в Python удаляет привязку имени

java - Как лучше всего определить слова «класс» и «объект» для того, кто их не использовал?

Объектно-ориентированное программирование - это создание программ, использующих в качестве строительных блоков «вещи», существующие в реальном мире, эти вещи реального мира называются объектами, следовательно, объектно-ориентированное -ориентированное

Например, если вы создаете программу адресной книги, вы можете определить следующие объекты:

  человек, адрес, телефон
  

Среди многих, многих других.Это будут объекты реальной жизни, и вы описываете свою программу в терминах этих абстракций.

Имея это в виду, вы можете приступить к описанию некоторых концепций.

Класс используется для определения характеристик, которые будут иметь объекты. Класс используется только как шаблон или план. Например, для всех людей в вашей адресной книге вы можете сказать, что все они будут иметь:

  Человек:
   - имя
   - фамилия
   - номер телефона
   - адрес
  

и т. Д.

Адрес может иметь:

  Адрес:
    - улица
    - количество
    - город
    - индекс
    - страна
  

И так далее. Как вы можете заметить, класс можно определить в терминах других классов, например, в этом контексте у человека есть один адрес.

Объект - это конкретный экземпляр данного класса. Когда вы добавляете запись в свою адресную книгу, вы создаете объект и заполняете атрибуты.

  одно лицо типа Лицо (
     - name = "Оскар"
     - фамилия = "Рейес"
     - номер телефона = "56 58 11 11"
     - адрес = адрес типа Адрес (
                     - street = "Tecolotes"
                     - число = 32
                     - city = "D.F. "
                     - почтовый индекс = 23423
                     - country = "Мексика"
                 )
  )
  

Итак, этот объект является классом, созданным с данными. Другая запись в адресной книге - это другие объекты с другими данными.

Это показывает разницу между ними.

В ООП есть и другие релевантные концепции, которые стоит перечислить и которые взаимосвязаны с концепцией объекта и класса:

Абстракция Вам не нужно перечислять все атрибуты человека, чтобы использовать его.например, в этом случае вам все равно, холост или женат этот человек, даже если в реальной жизни люди либо холосты, либо женаты.

Инкапсуляция Атрибуты человека скрыты для других объектов и доступны через методы, что предотвращает повреждение данных.

Полиморфизм Другой тип может по-разному реагировать на одно и то же сообщение или метод.

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

Объектно-ориентированное программирование (ООП) в Python 3 - Real Python

Объектно-ориентированное программирование (ООП) - это метод структурирования программы путем объединения связанных свойств и поведения в отдельные объекты . В этом руководстве вы изучите основы объектно-ориентированного программирования на Python.

Концептуально объекты подобны компонентам системы. Думайте о программе как о своего рода заводской сборочной линии. На каждом этапе сборочной линии компонент системы обрабатывает некоторый материал, в конечном итоге превращая сырье в готовый продукт.

Объект содержит данные, такие как необработанные или предварительно обработанные материалы на каждом этапе сборочной линии, и поведение, такое как действие, которое выполняет каждый компонент сборочной линии.

Из этого руководства вы узнаете, как:

  • Создайте класс , который похож на чертеж для создания объекта
  • Использование классов для создания новых объектов
  • Модельные системы с наследованием классов

Примечание: Это руководство адаптировано из главы «Объектно-ориентированное программирование (ООП)» в книге Основы Python: практическое введение в Python 3 .

В книге используется встроенный редактор IDLE Python для создания и редактирования файлов Python и взаимодействия с оболочкой Python, поэтому вы будете время от времени видеть ссылки на IDLE в этом руководстве. Однако у вас не должно возникнуть проблем с запуском примера кода из редактора и среды по вашему выбору.

Что такое объектно-ориентированное программирование в Python?

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

Например, объект может представлять человека с свойствами , такими как имя, возраст и адрес, и поведениями , такими как ходьба, разговор, дыхание и бег. Или это может быть электронное письмо со свойствами, такими как список получателей, тема и текст, а также с поведением, например добавлением вложений и отправкой.

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

Другой распространенной парадигмой программирования является процедурное программирование , которое структурирует программу как рецепт, поскольку она предоставляет набор шагов в форме функций и кодовых блоков, которые последовательно выполняются для выполнения задачи.

Ключевой вывод заключается в том, что объекты находятся в центре объектно-ориентированного программирования в Python, не только представляя данные, как в процедурном программировании, но также и в общей структуре программы.

Определение класса в Python

Примитивные структуры данных, такие как числа, строки и списки, предназначены для представления простых частей информации, таких как стоимость яблока, название стихотворения или ваши любимые цвета, соответственно. Что, если вы хотите изобразить что-то более сложное?

Например, предположим, вы хотите отслеживать сотрудников в организации. Вам необходимо сохранить некоторую основную информацию о каждом сотруднике, такую ​​как их имя, возраст, должность и год, в котором они начали работать.

Один из способов сделать это - представить каждого сотрудника в виде списка:

  kirk = ["Джеймс Кирк", 34, "Капитан", 2265]
spock = ["Спок", 35, "Научный сотрудник", 2254]
mccoy = ["Леонард Маккой", "Главный врач", 2266]
  

У этого подхода есть ряд проблем.

Во-первых, это может затруднить управление большими файлами кода. Если вы укажете kirk [0] на несколько строк от того места, где объявлен список kirk , запомните ли вы, что элемент с индексом 0 - это имя сотрудника?

Во-вторых, это может привести к ошибкам, если не у всех сотрудников одинаковое количество элементов в списке.В приведенном выше списке mccoy возраст отсутствует, поэтому mccoy [1] вернет «Главный врач» вместо возраста доктора Маккой.

Отличный способ сделать этот тип кода более управляемым и более удобным в обслуживании - это использовать классы .

Классы и экземпляры

Классы используются для создания пользовательских структур данных. Классы определяют функции, называемые методами , которые определяют поведение и действия, которые объект, созданный из класса, может выполнять со своими данными.

В этом руководстве вы создадите класс Dog , в котором будет храниться некоторая информация о характеристиках и поведении отдельной собаки.

Класс - это образец того, как что-то должно быть определено. На самом деле он не содержит никаких данных. Класс Dog указывает, что имя и возраст необходимы для определения собаки, но не содержит имени или возраста какой-либо конкретной собаки.

В то время как класс является планом, экземпляр - это объект, созданный из класса и содержащий реальные данные.Экземпляр класса Dog больше не является чертежом. Это настоящая собака с таким именем, как Майлз, которому четыре года.

Другими словами, класс похож на форму или анкету. Экземпляр подобен форме, заполненной информацией. Подобно тому, как многие люди могут заполнить одну и ту же форму своей собственной уникальной информацией, многие экземпляры могут быть созданы из одного класса.

Как определить класс

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

Вот пример класса Dog :

Тело класса Dog состоит из одного оператора: ключевого слова pass . проход часто используется в качестве заполнителя, указывающего, куда в конечном итоге пойдет код. Это позволяет запускать этот код, не вызывая ошибки Python.

Примечание. Имена классов Python записываются в нотации CapitalizedWords по соглашению.Например, класс для определенной породы собак, такой как джек-рассел-терьер, будет записан как JackRussellTerrier .

Класс Dog сейчас не очень интересен, поэтому давайте немного его украсим, определив некоторые свойства, которые должны иметь все объекты Dog . Мы можем выбирать из ряда свойств, включая имя, возраст, цвет шерсти и породу. Для простоты мы будем использовать имя и возраст.

Свойства, которые должны иметь все объекты Dog , определены в методе .__init __ () . Каждый раз, когда создается новый объект Dog , .__ init __ () устанавливает начальное состояние объекта, присваивая значения свойствам объекта. То есть .__ init __ () инициализирует каждый новый экземпляр класса.

Вы можете указать .__ init __ () любое количество параметров, но первым параметром всегда будет переменная с именем self . Когда создается новый экземпляр класса, он автоматически передается параметру self в .__init __ () , чтобы для объекта можно было определить новые атрибуты .

Давайте обновим класс Dog с помощью метода .__ init __ () , который создает атрибуты .name и .age :

  класс Собака:
    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст
  

Обратите внимание, что подпись метода .__ init __ () имеет отступ в четыре пробела. В теле метода есть восемь пробелов.Этот отступ жизненно важен. Он сообщает Python, что метод .__ init __ () принадлежит классу Dog .

В теле .__ init __ () есть два оператора, использующие переменную self :

  1. self.name = name создает атрибут с именем name и присваивает ему значение параметра name .
  2. self.age = age создает атрибут с именем age и присваивает ему значение параметра age .

Атрибуты, созданные в .__ init __ () , называются атрибутами экземпляра . Значение атрибута экземпляра зависит от конкретного экземпляра класса. Все объекты Dog имеют имя и возраст, но значения атрибутов name и age будут различаться в зависимости от экземпляра Dog .

С другой стороны, атрибутов класса - это атрибуты, которые имеют одинаковое значение для всех экземпляров класса.Вы можете определить атрибут класса, присвоив значение имени переменной вне .__ init __ () .

Например, следующий класс Dog имеет атрибут класса разновидностей со значением "Canis familis" :

  класс Собака:
    # Атрибут класса
    разновидности = "Canis knownis"

    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст
  

Атрибуты класса определяются непосредственно под первой строкой имени класса и имеют отступ в четыре пробела.Им всегда должно быть присвоено начальное значение. Когда создается экземпляр класса, автоматически создаются атрибуты класса, которым присваиваются их начальные значения.

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

Теперь, когда у нас есть класс Dog , давайте создадим собак!

Создание экземпляра объекта в Python

Откройте интерактивное окно IDLE и введите следующее:

>>>
  >>> класс Собака:
...     проходить
  

Это создает новый класс Dog без атрибутов или методов.

Создание нового объекта из класса называется созданием экземпляра объекта. Вы можете создать экземпляр нового объекта Dog , введя имя класса, а затем открывающие и закрывающие круглые скобки:

>>>
  >>> Собака ()
<__ main__.Dog объект в 0x106702d30>
  

Теперь у вас есть новый объект Dog по адресу 0x106702d30 .Эта забавно выглядящая строка букв и цифр представляет собой адрес памяти , который указывает, где в памяти вашего компьютера хранится объект Dog . Обратите внимание, что адрес, который вы видите на экране, будет другим.

Теперь создайте экземпляр второго объекта Dog :

>>>
  >>> Собака ()
<__ main__.Dog объект по адресу 0x0004ccc90>
  

Новый экземпляр Dog расположен по другому адресу памяти. Это потому, что это совершенно новый экземпляр, который полностью отличается от первого экземпляра Dog , который вы создали.

Чтобы увидеть это по-другому, введите следующее:

>>>
  >>> a = Собака ()
>>> b = Собака ()
>>> а == б
Ложь
  

В этом коде вы создаете два новых объекта Dog и назначаете их переменным a и b . При сравнении a и b с использованием оператора == результатом будет False . Несмотря на то, что a и b являются экземплярами класса Dog , они представляют два разных объекта в памяти.

Атрибуты класса и экземпляра

Теперь создайте новый класс Dog с атрибутом класса с именем .species и двумя атрибутами экземпляра с именем .name и .age :

. >>>
  >>> класс Собака:
... разновидности = "Canisiliaris"
... def __init __ (я, имя, возраст):
... self.name = имя
... self.age = возраст
  

Чтобы создать экземпляры объектов этого класса Dog , необходимо указать значения для name и age .Если вы этого не сделаете, Python выдаст TypeError :

. >>>
  >>> Собака ()
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
    Собака()
TypeError: __init __ () отсутствует 2 обязательных позиционных аргумента: 'name' и 'age'
  

Чтобы передать аргументы параметрам name и age , поместите значения в круглые скобки после имени класса:

>>>
  >>> buddy = Dog ("Приятель", 9)
>>> miles = Dog ("Мили", 4)
  

Это создает два новых экземпляра Dog - один для девятилетней собаки по имени Бадди и один для четырехлетней собаки по имени Майлз.

Метод .__ init __ () класса Dog имеет три параметра, так почему в этом примере ему передаются только два аргумента?

Когда вы создаете экземпляр объекта Dog , Python создает новый экземпляр и передает его первому параметру .__ init __ () . Это по существу удаляет параметр self , поэтому вам нужно беспокоиться только о параметрах name и age .

После создания экземпляров Dog вы можете получить доступ к их атрибутам экземпляров, используя точечную нотацию :

>>>
  >>> дружище.имя
'Приятель'
>>> buddy.age
9

>>> miles.name
'Майлз'
>>> miles.age
4
  

Таким же образом можно получить доступ к атрибутам класса:

>>>
  >>> buddy.species
'Canis knownis'
  

Одним из самых больших преимуществ использования классов для организации данных является то, что экземпляры гарантированно будут иметь ожидаемые атрибуты. Все экземпляры Dog имеют атрибуты .species , .name и .age , поэтому вы можете использовать эти атрибуты с уверенностью, зная, что они всегда будут возвращать значение.

Хотя наличие атрибутов гарантировано, их значения могут быть изменены динамически:

>>>
  >>> buddy.age = 10
>>> buddy.age
10

>>> miles.species = "Felis silvestris"
>>> miles.species
'Felis silvestris'
  

В этом примере вы изменяете атрибут .age объекта buddy на 10 . Затем вы меняете атрибут .species объекта miles на "Felis silvestris" , который является разновидностью кошек.Это делает Майлза довольно странной собакой, но это настоящий Python!

Ключевой вывод здесь заключается в том, что пользовательские объекты по умолчанию изменяемы. Объект является изменяемым, если его можно изменять динамически. Например, списки и словари изменяемы, но строки и кортежи неизменны.

Методы экземпляра

Методы экземпляра - это функции, которые определены внутри класса и могут быть вызваны только из экземпляра этого класса. Как и .__ init __ () , первый параметр метода экземпляра всегда self .

Откройте новое окно редактора в IDLE и введите следующий класс Dog :

  класс Собака:
    разновидности = "Canis knownis"

    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст

    # Метод экземпляра
    def описание (self):
        return f "{self.name} {self.age} лет"

    # Другой метод экземпляра
    def говорить (сам, звук):
        return f "{self.name} говорит {звук}"
  

Этот класс Dog имеет два метода экземпляра:

  1. .description () возвращает строку, отображающую имя и возраст собаки.
  2. .speak () имеет один параметр с именем sound и возвращает строку, содержащую имя собаки и звук, который издает собака.

Сохраните измененный класс Dog в файл с именем dog.py и нажмите F5 , чтобы запустить программу. Затем откройте интерактивное окно и введите следующее, чтобы увидеть методы вашего экземпляра в действии:

>>>
  >>> miles = Dog ("Мили", 4)

>>> миль.описание()
"Майлзу 4 года"

>>> miles.speak ("Гав-гав")
'Майлз говорит Гав-Гав'

>>> miles.speak ("Bow Wow")
"Майлз говорит:" Вау! "
  

В приведенном выше классе Dog .description () возвращает строку, содержащую информацию об экземпляре Dog miles . При написании собственных классов рекомендуется иметь метод, возвращающий строку, содержащую полезную информацию об экземпляре класса. Однако .description () - не самый питонский способ сделать это.

Когда вы создаете объект списка , вы можете использовать print () для отображения строки, которая выглядит как список:

>>>
  >>> names = ["Флетчер", "Дэвид", "Дэн"]
>>> печать (имена)
["Флетчер", "Дэвид", "Дэн"]
  

Давайте посмотрим, что произойдет, если вы print () объект миль :

>>>
  >>> печать (мили)
<__ main__.Объект "Собака" по адресу 0x00aeff70>
  

Когда вы печатаете (миль) , вы получаете загадочное сообщение о том, что миль - это объект Dog по адресу памяти 0x00aeff70 . Это сообщение бесполезно. Вы можете изменить то, что печатается, определив специальный метод экземпляра с именем .__ str __ () .

В окне редактора измените имя метода .description () класса Dog на .__str __ () :

  класс Собака:
    # Остальные части класса Dog оставьте как есть

    # Замените .description () на __str __ ()
    def __str __ (сам):
        return f "{self.name} {self.age} лет"
  

Сохраните файл и нажмите F5 . Теперь, когда вы напечатаете (миль) , вы получите гораздо более удобный результат:

>>>
  >>> miles = Dog ("Мили", 4)
>>> печать (мили)
"Майлзу 4 года"
  

Методы, подобные .__init __ () и .__ str __ () называются методами dunder , потому что они начинаются и заканчиваются двойным подчеркиванием. Есть много ужасных методов, которые вы можете использовать для настройки классов в Python. Хотя это слишком сложная тема для начинающей книги по Python, понимание dunder-методов является важной частью освоения объектно-ориентированного программирования на Python.

В следующем разделе вы увидите, как расширить свои знания и создать классы из других классов.

Проверьте свое понимание

Разверните блок ниже, чтобы проверить свое понимание:

Создайте класс Car с двумя атрибутами экземпляра:

  1. .color , в котором название цвета автомобиля хранится в виде строки
  2. . Пробег , в котором количество миль на автомобиле сохраняется в виде целого числа

Затем создайте экземпляры двух объектов Car - синего автомобиля с пробегом 20 000 миль и красного автомобиля с пробегом 30 000 миль - и распечатайте их цвета и пробег.Ваш результат должен выглядеть так:

  У синей машины 20 000 миль.
У красной машины 30 000 миль.
  

Вы можете развернуть блок ниже, чтобы увидеть решение:

Сначала создайте класс Car с атрибутами экземпляра .color и .m mile :

  класс Автомобиль:
    def __init __ (себя, цвет, пробег):
        self.color = цвет
        собственный пробег = пробег
  

цвет и пробег параметры .__init __ () присваиваются self.color и self.m, что создает два атрибута экземпляра.

Теперь вы можете создать два экземпляра Car :

  blue_car = Автомобиль (цвет = "синий", пробег = 20_000)
red_car = Автомобиль (цвет = "красный", пробег = 30_000)
  

Экземпляр blue_car создается путем передачи значения «blue» параметру color и 20_000 параметру Munning .Аналогичным образом создается red_car со значениями «красный» и 30_000 .

Чтобы напечатать цвет и пробег каждого объекта Car , вы можете перебрать кортеж , содержащий оба объекта:

  для машины в (blue_car, red_car):
    print (f "У машины {car.color} {car.m900 :,} миль")
  

Строка f в приведенном выше цикле для вставляет атрибуты .color и .m в строку и использует спецификатор формата :, для печати пробега, сгруппированного по тысячам и разделенных запятой.

Окончательный результат выглядит так:

  У синей машины 20 000 миль.
У красной машины 30 000 миль.
  

Когда будете готовы, можете переходить к следующему разделу.

Наследование от других классов в Python

Наследование - это процесс, при котором один класс перенимает атрибуты и методы другого. Вновь сформированные классы называются дочерними классами , а классы, от которых производятся дочерние классы, называются родительскими классами .

Дочерние классы могут переопределять или расширять атрибуты и методы родительских классов. Другими словами, дочерние классы наследуют все атрибуты и методы родительского объекта, но могут также определять атрибуты и методы, которые уникальны для них самих.

Хотя аналогия не идеальна, вы можете думать о наследовании объектов как о генетическом наследовании.

Возможно, вы унаследовали цвет волос от матери. Это атрибут, с которым вы родились. Допустим, вы решили покрасить волосы в фиолетовый цвет.Предполагая, что у вашей матери нет фиолетовых волос, вы всего лишь переопределили атрибут цвета волос, который вы унаследовали от своей мамы.

Вы также в некотором смысле наследуете свой язык от своих родителей. Если ваши родители говорят по-английски, то вы тоже будете говорить по-английски. А теперь представьте, что вы решили выучить второй язык, например, немецкий. В этом случае вы расширили атрибутов, потому что добавили атрибут, которого нет у ваших родителей.

Пример парка собак

Представьте на мгновение, что вы находитесь в собачьем парке.В парке много собак разных пород, и все они ведут себя по-разному.

Предположим, теперь вы хотите смоделировать парк собак с помощью классов Python. Класс Dog , который вы написали в предыдущем разделе, может различать собак по имени и возрасту, но не по породе.

Вы можете изменить класс Dog в окне редактора, добавив атрибут .breed :

  класс Собака:
    разновидности = "Canis knownis"

    def __init __ (я, имя, возраст, порода):
        себя.name = имя
        self.age = возраст
        self.breed = порода
  

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

Нажмите F5 , чтобы сохранить файл. Теперь вы можете смоделировать парк собак, создав несколько экземпляров разных собак в интерактивном окне:

>>>
  >>> miles = Dog («Майлз», 4, «Джек-Рассел-терьер»)
>>> buddy = Собака («Бадди», 9, «Такса»)
>>> jack = Собака («Джек», 3, «Бульдог»)
>>> jim = Dog («Джим», 5, «Бульдог»)
  

У каждой породы собак немного разное поведение.Например, у бульдогов низкий лай, который звучит как гав , а у такс более высокий лай, который больше похож на гав .

Используя только класс Dog , вы должны предоставить строку для аргумента sound из .speak () каждый раз, когда вы вызываете его в экземпляре Dog :

>>>
  >>> buddy.speak ("Яп")
'Бадди говорит Яп'

>>> jim.speak («Гав»)
'Джим говорит Гав'

>>> домкрат.говорить ("Гав")
'Джек говорит Гав'
  

Передача строки при каждом вызове .speak () является повторяющейся и неудобной. Более того, строка, представляющая звук, который издает каждый экземпляр Dog , должна определяться его атрибутом .breed , но здесь вам нужно вручную передавать правильную строку в .speak () каждый раз, когда он вызывается.

Вы можете упростить работу с классом Dog , создав дочерний класс для каждой породы собак.Это позволяет расширить функциональность, которую наследует каждый дочерний класс, включая указание аргумента по умолчанию для .speak () .

Родительские классы и дочерние классы

Давайте создадим дочерний класс для каждой из трех упомянутых выше пород: джек-рассел-терьер, такса и бульдог.

Для справки, вот полное определение класса Dog :

  класс Собака:
    разновидности = "Canis knownis"

    def __init __ (я, имя, возраст):
        себя.name = имя
        self.age = возраст

    def __str __ (сам):
        return f "{self.name} {self.age} лет"

    def говорить (сам, звук):
        return f "{self.name} говорит {звук}"
  

Помните, чтобы создать дочерний класс, вы создаете новый класс с его собственным именем, а затем помещаете имя родительского класса в круглые скобки. Добавьте следующее в файл dog.py , чтобы создать три новых дочерних класса класса Dog :

  класс JackRussellTerrier (Собака):
    проходить

класс Такса (Собака):
    проходить

класс Бульдог (Собака):
    проходить
  

Нажмите F5 , чтобы сохранить и запустить файл.Определив дочерние классы, вы можете создать экземпляры собак определенных пород в интерактивном окне:

>>>
  >>> miles = JackRussellTerrier ("Мили", 4)
>>> buddy = Такса ("Бадди", 9)
>>> jack = Бульдог ("Джек", 3)
>>> jim = Бульдог ("Джим", 5)
  

Экземпляры дочерних классов наследуют все атрибуты и методы родительского класса:

>>>
  >>> miles.species
'Canis knownis'

>>> дружище.имя
'Приятель'

>>> печать (домкрат)
Джеку 3 года

>>> jim.speak («Гав»)
'Джим говорит Гав'
  

Чтобы определить, к какому классу принадлежит данный объект, вы можете использовать встроенный type () :

>>>
  >>> тип (мили)
<класс '__main __. JackRussellTerrier'>
  

Что делать, если вы хотите определить, является ли миль также экземпляром класса Dog ? Вы можете сделать это с помощью встроенного isinstance () :

. >>>
  >>> isinstance (мили, собака)
Правда
  

Обратите внимание, что isinstance () принимает два аргумента: объект и класс.В приведенном выше примере isinstance () проверяет, является ли миль экземпляром класса Dog , и возвращает True .

Объекты miles , buddy , jack и jim являются экземплярами Dog , но miles не являются экземплярами Bulldog , а jack не являются экземплярами Dachshund :

>>>
  >>> isinstance (мили, бульдог)
Ложь

>>> isinstance (Джек, Такса)
Ложь
  

В более общем смысле, все объекты, созданные из дочернего класса, являются экземплярами родительского класса, хотя они могут не быть экземплярами других дочерних классов.

Теперь, когда вы создали дочерние классы для разных пород собак, давайте дадим каждой породе свое собственное звучание.

Расширение функциональности родительского класса

Поскольку собаки разных пород лают по-разному, вы хотите указать значение по умолчанию для аргумента sound их соответствующих методов .speak () . Для этого вам нужно переопределить .speak () в определении класса для каждой породы.

Чтобы переопределить метод, определенный в родительском классе, вы определяете метод с тем же именем в дочернем классе.Вот как это выглядит для класса JackRussellTerrier :

  класс JackRussellTerrier (Собака):
    def Speak (self, sound = "Arf"):
        return f "{self.name} говорит {звук}"
  

Теперь .speak () определено в классе JackRussellTerrier с аргументом по умолчанию для звука , установленным на "Arf" .

Обновите dog.py с новым классом JackRussellTerrier и нажмите F5 , чтобы сохранить и запустить файл.Теперь вы можете вызвать .speak () в экземпляре JackRussellTerrier без передачи аргумента в sound :

>>>
  >>> miles = JackRussellTerrier ("Мили", 4)
>>> miles.speak ()
'Майлз говорит Арф'
  

Иногда собаки лают по-разному, поэтому, если Майлз злится и рычит, вы все равно можете позвонить по номеру .speak () с другим звуком:

>>>
  >>> miles.speak ("Гррр")
'Майлз говорит Грр'
  

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

Например, в окне редактора измените строку, возвращаемую функцией .speak () в классе Dog :

  класс Собака:
    # Остальные атрибуты и методы оставьте как есть

    # Измените строку, возвращаемую .speak ()
    def говорить (сам, звук):
        return f "{self.name} лай: {звук}"
  

Сохраните файл и нажмите F5 . Теперь, когда вы создаете новый экземпляр Bulldog с именем jim , jim.Speak () возвращает новую строку:

>>>
  >>> jim = Бульдог ("Джим", 5)
>>> jim.speak («Гав»)
'Джим лает: Гав'
  

Однако вызов .speak () на экземпляре JackRussellTerrier не покажет новый стиль вывода:

>>>
  >>> miles = JackRussellTerrier ("Мили", 4)
>>> miles.speak ()
'Майлз говорит Арф'
  

Иногда имеет смысл полностью переопределить метод родительского класса.Но в этом случае мы не хотим, чтобы класс JackRussellTerrier потерял любые изменения, которые могут быть внесены в форматирование выходной строки Dog.speak () .

Для этого вам все равно нужно определить метод .speak () для дочернего класса JackRussellTerrier . Но вместо явного определения выходной строки вам нужно вызвать .speak () класса Dog внутри дочернего класса .speak () , используя те же аргументы, которые вы передали JackRussellTerrier.говорить () .

Вы можете получить доступ к родительскому классу из метода дочернего класса, используя super () :

  класс JackRussellTerrier (Собака):
    def Speak (self, sound = "Arf"):
        вернуть супер (). говорить (звук)
  

Когда вы вызываете super (). Speak (звук) внутри JackRussellTerrier , Python ищет в родительском классе Dog метод .speak () и вызывает его с переменной sound .

Обновите dog.py , добавив новый класс JackRussellTerrier . Сохраните файл и нажмите F5 , чтобы вы могли протестировать его в интерактивном окне:

>>>
  >>> miles = JackRussellTerrier ("Мили", 4)
>>> miles.speak ()
Майлз лает: Арф
  

Теперь, когда вы вызываете miles.speak () , вы увидите результат, отражающий новое форматирование в классе Dog .

Примечание: В приведенных выше примерах иерархия классов очень проста.Класс JackRussellTerrier имеет единственный родительский класс, Dog . В реальных примерах иерархия классов может быть довольно сложной.

super () делает гораздо больше, чем просто ищет метод или атрибут в родительском классе. Он просматривает всю иерархию классов в поисках соответствующего метода или атрибута. Если вы не будете осторожны, super () может дать удивительные результаты.

Проверьте свое понимание

Разверните блок ниже, чтобы проверить свое понимание:

Создайте класс GoldenRetriever , который наследуется от класса Dog .Присвойте аргументу sound для GoldenRetriever.speak () значение по умолчанию "Bark" . Используйте следующий код для родительского класса Dog :

.
  класс Собака:
    разновидности = "Canis knownis"

    def __init __ (я, имя, возраст):
        self.name = имя
        self.age = возраст

    def __str __ (сам):
        return f "{self.name} {self.age} лет"

    def говорить (сам, звук):
        return f "{self.name} говорит {звук}"
  

Вы можете развернуть блок ниже, чтобы увидеть решение:

Создайте класс с именем GoldenRetriever , который наследуется от класса Dog и переопределяет .Speak () метод:

  класс GoldenRetriever (Собака):
    def Speak (self, sound = "Лай"):
        вернуть супер (). говорить (звук)
  

Параметр sound в GoldenRetriever.speak () получает значение по умолчанию «Лай» . Затем super () используется для вызова метода .speak () родительского класса с тем же аргументом, который передается в sound , что и метод .speak () класса GoldenRetriever .

Заключение

Из этого руководства вы узнали об объектно-ориентированном программировании (ООП) на Python. Большинство современных языков программирования, таких как Java, C # и C ++, следуют принципам ООП, поэтому полученные здесь знания будут применимы независимо от того, куда приведет ваша карьера программиста.

В этом руководстве вы узнали, как:

  • Определите класс , который является своего рода схемой для объекта
  • Создать экземпляр объекта из класса
  • Используйте атрибутов и методы для определения свойств и поведения объекта
  • Используйте наследование для создания дочерних классов из родительского класса
  • Ссылка на метод родительского класса с помощью super ()
  • Проверить, наследуется ли объект от другого класса, используя isinstance ()

Если вам понравилось то, что вы узнали из этого примера из книги Основы Python: Практическое введение в Python 3 , то обязательно прочтите оставшуюся часть книги.