Классы Python

Введение

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

Python — объектно-ориентированный язык, все в Python является объектом.

Мы уже работали с некоторыми объектами в Python (см. главу о типах данных Python) например строки, списки — это объекты, определенные классами строк и списков, которые по умолчанию доступны в Python. Давайте объявим два объекта строкой и списком и проверим их тип с помощью функции type ().

Поскольку строка1 является объектом, строки «Доброе утро» могут создавать их версию в верхнем или нижнем регистре, вызывая методы upper () и lower (), связанные со строкой. Проверьте это в Python IDLE.

Примечание. Чтобы увидеть список строковых методов выполняет следующую команду в Python IDLE
>>> help (str)

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

Локальные переменные:

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

  # python-local-variable.pydef function_local (a): print ('a is ->', a) a = 50print ('После нового значения в функции a  is -> ', a) a = 100function_local (40) print (' Значение a равно -> ', a)  

Вывод:

  a равно -> 40 После нового значения в функции a равно -> 50 Значение a равно -> 100 

Пояснение:

Строка № 2: Объявлена ​​функция function_local (a) с параметром
Строка № 3: Печать ‘a’ использует значение параметра. [Значение a теперь равно 100, поскольку мы присваиваем a значению 100 (строка № 6) перед выполнением функции (строка № 7).]
Строка № 4: присвоить значение 50 параметру ‘a ‘.
Строка №5: снова выведите’ a ‘, поскольку a является локальным внутри функции, следовательно, значение a теперь равно 50.
Строка №- 8: Это последний оператор печати и ‘a’ становится 100. До сих пор то, что мы делали внутри функции, не влияет на функцию. Это называется областью действия переменной.

глобальный оператор:

Цель глобального оператора — присвоить значение в переменную, объявленную вне функции. Свободные переменные (см. Строку № 06 в предыдущем примере) могут относиться к глобальным без объявления глобальных переменных.. Синтаксис глобального оператора -> global var_name1, var_name2, ..
См. Следующий пример:

  # python-global-variable.pydef function_local ()  : global a print ('a is ->', a) a = 50 print ('После нового значения в функции a is ->', a) a = 100function_local () print ('Значение a равно ->',  a)  

Вывод:

 a is -> 100 После нового значения в функции a is -> 50 Значение a равно -> 50 

Объяснение:

Строка № — 3: переменная ‘a’ объявлена ​​как глобальная переменная, поэтому значение a теперь 100.
Строка № — 5: Присвойте значение 50 значению ‘a’, и оно будет содержать то же значение внутри и вне функции, если мы не присвоим новое значение.

нелокальный оператор

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

  def outside (): a = 10 def inside (): a = 20 print ("Inside a ->", a)  inside () print ("за пределами a->", a) за пределами ()  

В приведенном выше примере первая инструкция print () просто выводит значение ‘a’, которое равно 20, поскольку ‘a’ локально внутри функции inside (). Второй оператор print () печатает значение ‘a’, равное 10, поскольку функция inside () не действует. Теперь мы вводим нелокальный оператор в функцию inside (), и код будет выглядеть следующим образом:

  def outside (): a = 10 def inside (): nonlocal aa = 20 print (  "Значение функции in inside () -", a) inside () print ("Значение функции in outside () -", a) outside ()  

Второй оператор print () печатает значение ‘a’, которое равно 20, поскольку переменная ‘a’ rebound ..

Области действия и пространства имен Python:

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

Пространство имен — это отображение имен на объекты.

— Например, ‘a’ сопоставляется с [1, 2, 3] или ‘a’ соответствует значению 25.

— Большинство пространств имен, в настоящее время реализованных как словари Python (содержащие имена и значения объектов).

— Имена в разных пространствах имен не имеют абсолютно никакого отношения (например, переменная ‘a’ может быть привязана к разным объектам в разных пространствах имен).

— Примеры пространства имен: глобальное имя модуля, локальные имена в вызове функции, встроенные имена (содержащие функции, такие как min ()), атрибуты объекта.

Python создает пространства имен в разное время.

— встроенное пространство имен создается при запуске интерпретатора Python и никогда не удаляется.

— Глобальное пространство имен для модуля создается при вызове модуля и длится, пока интерпретатор не завершит работу.

— Локальное пространство имен для функции создается при вызове функции и удаляется при ее возврате.

Область видимости — это текстовая область программы Python, в которой пространство имен доступно напрямую. Области видимости в python следующие:

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

— охватывающая область (во включающей функции) не содержит -локальные и неглобальные имена.

— Глобальные имена текущего модуля.

— Самая внешняя область — это пространство имен, содержащее встроенные имена.

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

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

класс Студент:
Заявление-1
Заявление-1
….
….
….
Statement-n

Определение класса начинается с ключевого слова ‘class’, за которым следует имя класса и двоеточие.

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

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

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

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

  # studentdetails.pyclass Студент: stu_class = 'V' stu_roll_no = 12 stu_name = "David"  

Объекты класса:

Есть два типа поддерживаемых объектов класса операций: ссылки на атрибуты и создание экземпляров. Ссылки на атрибуты используют стандартный синтаксис obj.name для всех ссылок на атрибуты в Python. Поэтому, если определение класса (добавьте метод в предыдущем примере) выглядит следующим образом

  # studentdetails1.pyclass Student: "" "Простой пример класса" "" stu_class = 'V  'stu_roll_no = 12 stu_name = "David" def messg (self): return' Новая сессия скоро начнется. ' 

тогда Student.stu_class, Student.stu_roll_no, Student.stu_name являются действительная ссылка на атрибут и возвращает «V», 12, «David». Student.messg возвращает объект функции. В Python self — это имя первого аргумента метода, который отличается от обычной функции. Вместо того, чтобы передавать объект в качестве параметра в методе, слово self относится к самому объекту. Например, если метод определен как avg (self, x, y, z), он должен называться a.avg (x, y, z). Смотрите вывод атрибутов в Python Shell.

__ doc__ также является допустимым атрибутом, который возвращает строку документации класса.

__ init__ method:

В Python есть много имен методов, которые имеют особое значение. Класс может определять специальный метод с именем __init__, который выполняет некоторую работу по инициализации и служит конструктором для класса. Как и другие функции или методы, __init__ может принимать любое количество аргументов. Метод __init__ запускается, как только создается экземпляр объекта класса, и создание экземпляра класса автоматически вызывает __init __ () для вновь созданного экземпляра класса. См. Следующий пример. Новый инициализированный экземпляр можно получить следующим образом:

  # studentdetailsinit.pyclass Student: "" "Простой пример класса" "" def __init __ (self, sclass  , sroll, sname): self.c = sclass self.r = sroll self.n = sname def messg (self): return 'Скоро начнется новый сеанс.'  

Операторы

Дополнение :

  class Школа: def __init __ (self, * Subjects): self.subjects = list (themes) class Subject: def __add __ (self, other): return School (self, other) F1,  F2 = Subject (), Subject () F1 + F2  

Вывод:

  main __. School> 
  from pathlib import Pathpath = Path ('.'). parent/'data'path.absolute ()  

Вывод:

 WindowsPath ('C:/Users/User/AppData/Local/Programs/Python/Python37/data') 

Greater/Equality:

  class Person: '' 'person entity' '' def __init __ (self,  first_name, surname, age): self.first_name = first_name self.surname = surname self.age = age def __repr __ (self): return f'Person (first_name = {self.first_name}, surname = {self.surname}, age).  = {self.age}) 'def __lt __ (self, other): return self.age  

Вывод:

 [Person (first_name = John  , surname = Smith, age = 13), 
Person (first_name = Anne, surname = McNell, age = 11),
Person (first_name = Mary, surname = Brown, age = 14)]

  class Школа: def __init __ (self, * Subjects): self.subjects =  list (Subject) def __len __ (self): return len (self.subjects) Sub = School (Subject (), Subject ()) print (len (Sub))  

Вывод :

 2 

Getitem:

  школа класса: def __init__  (self, * Subject): self.subjects = list (Subject) def __getitem __ (self, i): return self.subjects [i] Sub = School (Subject (), Subject ()) print (Sub [0])  

Вывод:

  main __. subject> 

Наследование:

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

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

class DerivedClassName (BaseClassName):
Statement-1
Statement-1
….
….
….
Statement-n
class DerivedClassName (BaseClassName1, BaseClassName2, BaseClassName3 ):
Заявление-1
Заявление-1
….
….
….
Заявление-n

В компании Завод и сотрудники офиса имеют определенные общие свойства — у всех есть имя , обозначение, возраст и т. д. Таким образом, они могут быть сгруппированы в класс под названием CompanyMember. Помимо общих черт, у каждого подкласса есть своя характеристика: FactoryStaff получает сверхурочную работу, а OfficeStaff — командировочные для работы в офисе. Производные классы (FactoryStaff и OfficeStaff) имеют свою характеристику и, кроме того, наследуют свойства базового класса (CompanyMember). См. Пример кода.

  # python-inheritance.pyclass CompanyMember: '' 'Представляет члена компании.' '' Def __init __ (я, имя, обозначение, возраст): self  .name = nameself.designation = designationself.age = agedef tell (self): '' 'Подробная информация о сотруднике.' '' print ('Имя:', self.name, ' nDesignation:', self.designation, '   nAge: ', self.age) class FactoryStaff (CompanyMember):' '' Представляет персонал фабрики. '' 'def __init __ (self, name, designation, age, overtime_allow): CompanyMember .__ init __ (self, name, designation,  age) self.overtime_allow = overtime_allowCompanyMember.tell (self) print ('Доплата за сверхурочную работу:', self.overtime_allow) class OfficeStaff (CompanyMember): '' 'Представляет сотрудников офиса.' '' def __init __ (self, name, designation,  age, travelling_allow): CompanyMember .__ init __ (я, имя, обозначение, возраст) self.marks = travelling_allowCompanyMember.tell (self) print ('Travel Allowance:', self.travelling_allow)  

Теперь выполните класс в Python Shell и посмотрите результат.

Проверьте свои навыки Python с помощью викторины w3resource

Оцените статью
nanomode.ru
Добавить комментарий