#17 – Основы ООП. Создание класса и объекта
ООП – объектно-ориентированное программирование. Является одной из наиболее важных концепций языка Python. Мы с вами приступаем к изучению теоретической и практической реализации ООП. За урок мы научимся прописывать классы и объекты в языке Питон.
На начальном этапе ООП – это тёмный лес, в котором многое непонятно и слишком усложнено. На самом деле всё вовсе не так. Предлагаем абстрагироваться от специфических (непонятных) определений и познакомиться с ООП простыми словами.
ООП простыми словами
Поскольку на примере все усвоить гораздо проще, то давайте за пример возьмем робота, которого постараемся описать за счёт классов в ООП.
Класс в случае с роботом – это его чертёж. Экземпляром класса (объектом) называет целый робот, который создан точно по чертежу.
Наследование – это добавление полезных опций к чертежу робота. К примеру, берем стандартный чертёж робота и дорисуем к нему лазеры, крылья и броню. Все эти дорисовки мы сделаем в классе наследнике, основной функционал которого взят из родительского класса.
Полиморфизм – это общий функционал для всех роботов и не важно что каждый робот может очень сильно отличаться друг от друга. К примеру, в главном классе мы указываем возможность передвижения для всех последующих роботов. Далее в классе наследнике мы можем дополнительно указать возможность левитации для робота, в другом же классе укажем возможность передвижения по воде и так далее. Получается, что есть общий функционал что записан в главном чертеже, но его можно переписать для каждого последующего робота (для каждого наследника).
А инкапсуляция является для нас бронёй, защищающей робота. Под пластырем брони находятся уязвимые элементы, вроде проводов и микросхем. После прикрытия брешей с помощью брони (protected
или private
), робот полностью защищён от внешних вмешательств. По сути, мы делаем доступ ко всем полям лишь за счёт методов, тем самым прямой доступ к полю будет закрыт.
У всех классов методы могут отличаться, как и поля с конструкторами. Каждый класс позволяет создавать любое количество разных объектов, все из них имеют собственные характеристики.
Создание классов
Для создания класса необходимо прописать ключевое слово class
и далее название для класса. Общепринято начинать названия классов с буквы в верхнем регистре, но если этого не сделать, то ошибки не будет.
В любом классе можно создавать поля (переменные), методы (функции), а также конструкторы.
Создав новый класс и поместив туда какую-либо информацию мы можем создавать на основе него новые объекты. Объекты будут иметь доступ ко всем характеристикам класса.
Пример простого класса приведен ниже:
class Book: pass # Класс может ничего не возвращать
На основе такого класса мы можем создать множество объектов. Каждый объект в данном случае будет представлять из себя конкретную книжку. Для каждого объекта мы можем указать уникальные данные.
Чтобы создать объект нам потребуется следующий код:
obj_new = Some() # Создание объекта obj_second = Some() # Создание 2 объекта
ОСновы работы с классами в python 3 ~ PythonRu
Объектно-ориентированное программирование в Python
Python — это процедурно-ориентированный и одновременно объектно-ориентированный язык программирования.
Процедурно-ориентированный
«Процедурно-ориентированный» подразумевает наличие функций. Программист может создавать функции, которые затем используются в сторонних скриптах.
Объектно-ориентированный
«Объектно-ориентированный» подразумевает наличие классов. Есть возможность создавать классы, представляющие собой прототипы для будущих объектов.
Создание класса в Python
Синтаксис для написания нового класса:
class ClassName: 'Краткое описание класса (необязательно)' # Код ...
- Для создания класса пишется ключевое слово
class
, его имя и двоеточие (:). Первая строчка в теле класса описывает его. (По желанию) получить доступ к этой строке можно с помощьюClassName.__doc__
- В теле класса допускается объявление атрибутов, методов и конструктора.
Атрибут:
Атрибут — это элемент класса. Например, у прямоугольника таких 2: ширина (width
) и высота (height
).
Метод:
- Метод класса напоминает классическую функцию, но на самом деле — это функция класса. Для использования ее необходимо вызывать через объект.
- Первый параметр метода всегда
self
(ключевое слово, которое ссылается на сам класс).
Конструктор:
- Конструктор — уникальный метод класса, который называется
__init__
. - Первый параметр конструктора во всех случаях
self
(ключевое слово, которое ссылается на сам класс). - Конструктор нужен для создания объекта.
- Конструктор передает значения аргументов свойствам создаваемого объекта.
- В одном классе всегда только один конструктор.
- Если класс определяется не конструктором, Python предположит, что он наследует конструктор родительского класса.
# Прямоугольник. class Rectangle : 'Это класс Rectangle' # Способ создания объекта (конструктор) def __init__(self, width, height): self.width= width self.height = height def getWidth(self): return self.width def getHeight(self): return self.height # Метод расчета площади. def getArea(self): return self.width * self.height
Создание объекта с помощью класса Rectangle:
# Создаем 2 объекта: r1 & r2 r1 = Rectangle(10,5) r2 = Rectangle(20,11) print("r1.width = ", r1.width) print("r1.height = ", r1.height) print("r1.getWidth() = ", r1.getWidth()) print("r1.getArea() = ", r1.getArea()) print("-----------------") print("r2.width = ", r2.width) print("r2.height = ", r2.height) print("r2.getWidth() = ", r2.getWidth()) print("r2.getArea() = ", r2.getArea())
Что происходит при создании объекта с помощью класса?
При создании объекта класса Rectangle
запускается конструктор выбранного класса, и атрибутам нового объекта передаются значения аргументов. Как на этом изображении:
Конструктор с аргументами по умолчанию
В других языках программирования конструкторов может быть несколько. В Python — только один. Но этот язык разрешает задавать значение по умолчанию.
Все требуемые аргументы нужно указывать до аргументов со значениями по умолчанию.
class Person: # Параметры возраста и пола имеют значение по умолчанию. def __init__(self, name, age=1, gender="Male"): self.name = name self.age = age self.gender= gender def showInfo(self): print("Name: ", self.name) print("Age: ", self.age) print("Gender: ", self.gender)
Например:
from person import Person # Создать объект Person. aimee = Person("Aimee", 21, "Female") aimee.showInfo() print(" --------------- ") # возраст по умолчанию, пол. alice = Person( "Alice" ) alice.showInfo() print(" --------------- ") # Пол по умолчанию. tran = Person("Tran", 37) tran.showInfo()
Сравнение объектов
В Python объект, созданный с помощью конструктора, занимает реальное место в памяти. Это значит, что у него есть точный адрес.
Если объект AA
BB
, то он не будет сущностью, занимающей отдельную ячейку памяти. Вместо этого он лишь ссылается на местоположение BB
.Оператор ==
нужен, чтобы узнать, ссылаются ли два объекта на одно и то же место в памяти. Он вернет True
, если это так. Оператор !=
вернет True
, если сравнить 2 объекта, которые ссылаются на разные места в памяти.
from rectangle import Rectangle r1 = Rectangle(20, 10) r2 = Rectangle(20 , 10) r3 = r1 # Сравните r1 и r2 test1 = r1 == r2 # --> False # Сравните r1 и r3 test2 = r1 == r3 # --> True print ("r1 == r2 ? ", test1) print ("r1 == r3 ? ", test2) print (" -------------- ") print ("r1 != r2 ? ", r1 != r2) print ("r1 != r3 ? ", r1 != r3)
Атрибуты
В Python есть два похожих понятия, которые на самом деле отличаются:
- Атрибуты
- Переменные класса
Стоит разобрать на практике:
class Player: # Переменная класса minAge = 18 maxAge = 50 def __init__(self, name, age): self. name = name self.age = age
Атрибут
Объекты, созданные одним и тем же классом, будут занимать разные места в памяти, а их атрибуты с «одинаковыми именами» — ссылаться на разные адреса. Например:
from player import Player player1 = Player("Tom", 20) player2 = Player("Jerry", 20) print("player1.name = ", player1.name) print("player1.age = ", player1.age) print("player2.name = ", player2.name) print("player2.age = ", player2.age) print(" ------------ ") print("Assign new value to player1.age = 21 ") # Присвойте новое значение атрибуту возраста player1. player1.age = 21 print("player1.name = ", player1.name) print("player1.age = ", player1.age) print("player2.name = ", player2.name) print("player2.age = ", player2.age)
Python умеет создавать новые атрибуты для уже существующих объектов. Например, объект player1
address
.from player import Player player1 = Player("Tom", 20) player2 = Player("Jerry", 20) # Создайте новый атрибут с именем «address» для player1. player1.address = "USA" print("player1.name = ", player1.name) print("player1.age = ", player1.age) print("player1.address = ", player1.address) print(" ------------------- ") print("player2.name = ", player2.name) print("player2.age = ", player2.age) # player2 е имеет атрибута 'address' (Error!!) print("player2.address = ", player2.address)
Вывод:
player1.name = Tom player1.age = 20 player1.address = USA ------------------- player2.name = Jerry player2.age = 20 Traceback (most recent call last): File "C:/Users/gvido/class.py", line 27, in print("player2.address = ", player2.address) AttributeError: 'Player' object has no attribute 'address'
Атрибуты функции
Обычно получать доступ к атрибутам объекта можно с помощью оператора «точка» (например, player1.name
). Но Python умеет делать это и с помощью функции.
Функция | Описание |
---|---|
getattr (obj, name[,default]) | Возвращает значение атрибута или значение по умолчанию, если первое не было указано |
hasattr (obj, name) | Проверяет атрибут объекта — был ли он передан аргументом «name» |
setattr (obj, name, value) | Задает значение атрибута. Если атрибута не существует, создает его |
delattr (obj, name) | Удаляет атрибут |
from player import Player player1 = Player("Tom", 20) # getattr(obj, name[, default]) print("getattr(player1,'name') = " , getattr(player1,"name")) print("setattr(player1,'age', 21): ") # setattr(obj,name,value) setattr(player1,"age", 21) print("player1.age = ", player1.age) # Проверка, что player1 имеет атрибут 'address'? hasAddress = hasattr(player1, "address") print("hasattr(player1, 'address') ? ", hasAddress) # Создать атрибут 'address' для объекта 'player1' print("Create attribute 'address' for object 'player1'") setattr(player1, 'address', "USA") print("player1.address = ", player1.address) # Удалить атрибут 'address'. delattr(player1, "address")
Вывод:
getattr(player1,'name') = Tom setattr(player1,'age', 21): player1.age = 21 hasattr(player1, 'address') ? False Create attribute 'address' for object 'player1' player1.address = USA
Встроенные атрибуты класса
Объекты класса — дочерние элементы по отношению к атрибутам самого языка Python. Таким образом они заимствуют некоторые атрибуты:
Атрибут | Описание |
---|---|
__dict__ | Предоставляет данные о классе коротко и доступно, в виде словаря |
__doc__ | Возвращает строку с описанием класса, или None , если значение не определено |
__class__ | Возвращает объект, содержащий информацию о классе с массой полезных атрибутов, включая атрибут __name__ |
__module__ | Возвращает имя «модуля» класса или __main__ , если класс определен в выполняемом модуле. |
class Customer: 'Это класс Customer' def __init__(self, name, phone, address): self.name = name self.phone = phone self. address = address john = Customer("John",1234567, "USA") print ("john.__dict__ = ", john.__dict__) print ("john.__doc__ = ", john.__doc__) print ("john.__class__ = ", john.__class__) print ("john.__class__.__name__ = ", john.__class__.__name__) print ("john.__module__ = ", john.__module__)
Вывод:
john.__dict__ = {'name': 'John', 'phone': 1234567, 'address': 'USA'} john.__doc__ = Это класс Customer john.__class__ = john.__class__.__name__ = Customer john.__module__ = __main__
Переменные класса
Переменные класса в Python — это то же самое, что Field в других языках, таких как Java или С#. Получить к ним доступ можно только с помощью имени класса или объекта.
Для получения доступа к переменной класса лучше все-таки использовать имя класса, а не объект. Это поможет не путать «переменную класса» и атрибуты.
У каждой переменной класса есть свой адрес в памяти. И он доступен всем объектам класса.
from player import Player player1 = Player("Tom", 20) player2 = Player("Jerry", 20) # Доступ через имя класса. print ("Player.minAge = ", Player.minAge) # Доступ через объект. print("player1.minAge = ", player1.minAge) print("player2.minAge = ", player2.minAge) print(" ------------ ") print("Assign new value to minAge via class name, and print..") # Новое значение minAge через имя класса Player.minAge = 19 print("Player.minAge = ", Player.minAge) print("player1.minAge = ", player1.minAge) print("player2.minAge = ", player2.minAge)
Вывод:
Player.minAge = 18 player1.minAge = 18 player2.minAge = 18 ------------ Assign new value to minAge via class name, and print.. Player.minAge = 19 player1.minAge = 19 player2.minAge = 19
Составляющие класса или объекта
В Python присутствует функция dir
, которая выводит список всех методов, атрибутов и переменных класса или объекта.
from player import Player # Вывести список атрибутов, методов и переменных объекта 'Player' print(dir(Player)) print("\n\n") player1 = Player("Tom", 20) player1. address ="USA" # Вывести список атрибутов, методов и переменных объекта 'player1' print(dir(player1))
Вывод:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'maxAge', 'minAge'] ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'address', 'age', 'maxAge', 'minAge', 'name']
Классы и объекты Python [Руководство] — PYnative
Python — это объектно-ориентированный язык программирования. Это означает, что почти весь код реализован с использованием специальной конструкции, называемой классами. Класс — это шаблон кода для создания объектов.
Прочитав эту статью, вы узнаете :
- Что такое класс и объекты в Python
- Атрибуты и методы класса
- Создание и доступ к свойствам объекта
- Изменение и удаление объекта
Содержание
- Что такое класс и объекты в Python?
- Создание класса в Python
- Создание объекта класса
- Атрибуты класса
- Методы класса
- Класс Конвенция
- PASS Оператор в классе
- .
- Удалить объекты
Что такое класс и объекты в Python?
- Класс : Класс представляет собой определяемую пользователем структуру данных, которая связывает элементы данных и методы в единое целое. Класс — это схема или шаблон кода для создания объекта . Используя класс, вы можете создать столько объектов, сколько захотите.
- Объект : Объект является экземпляром класса . Это набор атрибутов (переменных) и методов. Мы используем объект класса для выполнения действий.
Объекты имеют две характеристики: У них есть состояния и поведение (к объекту присоединены атрибуты и методы) Атрибуты представляют его состояние, а методы представляют его поведение. Используя его методы, мы можем изменить его состояние.
Короче говоря, каждый объект имеет следующее свойство.
- Идентификация : Каждый объект должен быть однозначно идентифицирован.
- Состояние : Объект имеет атрибут, который представляет состояние объекта, а также отражает свойство объекта.
- Поведение : Объект имеет методы, которые представляют его поведение.
Python — это объектно-ориентированный язык программирования, поэтому все в Python рассматривается как объект. Объект – это реальная сущность. Это набор различных данных и функций, которые работают с этими данными.
Например, если мы разрабатываем класс на основе состояний и поведения человека, то состояния могут быть представлены как переменные экземпляра, а поведения — как методы класса.
понять классы и объекты в PythonРеальный пример классов и объектов.
Класс : Лицо
- Состояние : Имя, Пол, Профессия
- Поведение : Работа, Учеба
Используя приведенный выше класс поведения, мы можем изобразить несколько состояний и различных объектов, которые мы можем создать.
Объект 1 : Jessa
- State :
- Имя: Jessa
- Пол: женщина
- Профессия: Инженер -программист
- Поведение :
- . в компании ABC
- Учеба: Она учится 2 часа в день
Объект 2 : Джон
- Штат
- 0 :
- 0
- ИмяСекс: мужчина
- Профессия: Доктор
- . женщина, и она работает инженером-программистом. С другой стороны, Джон — мужчина, и он юрист. Здесь оба объекта созданы из одного класса, но имеют разные состояния и поведение .
Создание класса в Python
В Python класс определяется с помощью ключевого слова
class
. Синтаксис для создания класса приведен ниже.Синтаксис
класс имя_класса: '''Это строка документации. Я создал новый класс ''' <утверждение 1> <утверждение 2> . .
-
class_name
: Это имя класса -
Docstring
: Это первая строка внутри класса и содержит краткое описание класса. Хотя это и не обязательно, это настоятельно рекомендуется. -
операторы
: Атрибуты и методы
Пример: определение класса в Python
В этом примере мы создаем класс Person с переменными экземпляра имени, пола и профессии.
класс Лицо: def __init__(я, имя, пол, профессия): # элементы данных (переменные экземпляра) self.name = имя селф.секс = секс self.profession = профессия # Поведение (методы экземпляра) деф-шоу (я): print('Имя:', self.name, 'Пол:', self.sex, 'Профессия:', self.profession) # Поведение (методы экземпляра) деф работа(я): print(self.name, 'работа', self.profession)
Создать объект класса
Объект необходим для работы с атрибутами класса. Объект создается с использованием имени класса. Когда мы создаем объект класса, это называется созданием экземпляра. Объект также называют экземпляром класса.
Конструктор — это специальный метод, используемый для создания и инициализации объекта класса. Этот метод определен в классе.
В Python создание объекта разделено на две части: Создание объекта и Инициализация объекта
- Внутри,
__new__
— это метод, который создает объект - И, используя метод
__init__()
, мы можем реализовать конструктор для инициализации объекта.
Подробнее : Конструкторы в Python
Синтаксис
<имя-объекта> = <имя-класса>(<аргументы>)
Ниже приведен код для создания объекта класса Person 3 jessa = Человек(‘Джесса’, ‘Женщина’, ‘Инженер-программист’)
Полный пример :
класс Person: def __init__(я, имя, пол, профессия): # элементы данных (переменные экземпляра) self.name = имя селф.секс = секс self.profession = профессия # Поведение (методы экземпляра) деф-шоу (я): print('Имя:', self.name, 'Пол:', self.sex, 'Профессия:', self.profession) # Поведение (методы экземпляра) деф работа(я): print(self.name, 'работа', self.profession) # создать объект класса Джесса = Человек('Джесса', 'Женщина', 'Инженер-программист') # методы вызова Джесса.шоу() Джесса.работа()
Выход :
Имя: Джесса Пол: Женский Профессия: Инженер-программист Джесса работает инженером-программистом
Атрибуты класса
При разработке класса мы используем переменные экземпляра и переменные класса.
В классе атрибуты могут быть разделены на две части:
- Переменные экземпляра : Переменные экземпляра — это атрибуты, прикрепленные к экземпляру класса. Мы определяем переменные экземпляра в конструкторе (
__init__()
метод класса). - Переменные класса : Переменная класса — это переменная, объявленная внутри класса, но вне любого метода экземпляра или
__init__()
метода.
Объекты не имеют общих атрибутов экземпляра. Вместо этого каждый объект имеет свою копию атрибута экземпляра и уникален для каждого объекта.
Все экземпляры класса совместно используют переменные класса. Однако, в отличие от переменных экземпляра, значение переменной класса не меняется от объекта к объекту.
Будет создана и разделена между всеми объектами класса только одна копия статической переменной.
Доступ к свойствам и присвоение значений
- К атрибуту экземпляра можно получить доступ или изменить его с помощью записи через точку:
имя_экземпляра. имя_атрибута
. - Доступ к переменной класса или ее изменение с использованием имени класса
Пример
class Student: # переменные класса school_name = 'Азбука школы' # конструктор def __init__(я, имя, возраст): # переменные экземпляра self.name = имя возраст = возраст s1 = Студент ("Гарри", 12) # доступ к переменным экземпляра print('Ученик:', s1.name, s1.age) # доступ к переменной класса print('Название школы:', Student.school_name) # Изменить переменные экземпляра s1.name = 'Джесса' s1.возраст = 14 print('Ученик:', s1.name, s1.age) # Изменить переменные класса Student.school_name = 'Школа XYZ' print('Название школы:', Student.school_name)
Выход
Ученик: Гарри 12 Название школы: Школа АВС Ученик: Джесса 14 Название школы: Школа XYZ
Методы класса
В объектно-ориентированном программировании внутри класса мы можем определить следующие три типа методов.
- Метод экземпляра : Используется для доступа или изменения состояния объекта. Если мы используем переменные экземпляра внутри метода, такие методы называются методами экземпляра.
- Метод класса : Используется для доступа или изменения состояния класса. В реализации метода, если мы используем только переменные класса, то такой тип методов мы должны объявить как метод класса.
- Статический метод : это общий служебный метод, который выполняет задачу изолированно. Внутри этого метода мы не используем переменную экземпляра или класса, потому что этот статический метод не имеет доступа к атрибутам класса.
Методы экземпляра работают на уровне экземпляра (уровень объекта). Например, если у нас есть два объекта, созданные из класса ученика, они могут иметь разные имена, отметки, номера бросков и т. д. Используя методы экземпляра, мы можем получить доступ к переменным экземпляра и изменить их.
Метод класса привязан к классу , а не к объекту класса. Он может получить доступ только к переменным класса.
Подробнее : Метод класса Python, статический метод и метод экземпляра
Пример : Определение и вызов метода экземпляра и метода класса
# демонстрация методов класса Ученик класса: # переменная класса school_name = 'Азбука школы' # конструктор def __init__(я, имя, возраст): # переменные экземпляра self.name = имя возраст = возраст # метод экземпляра деф-шоу (я): # доступ к переменным экземпляра и переменным класса print('Ученик:', self.name, self.age, Student.school_name) # метод экземпляра определение change_age (я, новое_возраст): # изменить переменную экземпляра self.age = новый_возраст # метод класса @классметод def изменить_имя_школы (cls, новое_имя): # изменить переменную класса cls. school_name = новое_имя s1 = Студент ("Гарри", 12) # вызвать методы экземпляра s1.show() s1.change_age(14) # вызов метода класса Student.modify_school_name('Школа XYZ') # вызвать методы экземпляра s1.show()
Выход
Ученик: Гарри 12 Школа ABC Ученик: Гарри 14 XYZ School
Соглашение об именах классов
Соглашения об именах необходимы в любом языке программирования для лучшей удобочитаемости. Если мы дадим осмысленное имя, это сэкономит наше время и силы позже. Написание удобочитаемого кода — один из руководящих принципов языка Python.
Мы должны следовать определенным правилам, когда выбираем имя для класса в Python.
- Правило-1: Имена классов должны соответствовать соглашению UpperCaseCamelCase
- Правило-2: Классы-исключения должны заканчиваться на « Error ».
- Правило-3: Если класс можно вызывать (вызывать класс откуда-то), в этом случае мы можем дать имя класса, например, функцию .
- Правило-4: Встроенные классы Python обычно представляют собой слова в нижнем регистре
В Python pass — это оператор null. Таким образом, при выполнении оператора pass ничего не происходит.
Оператор
pass
используется, чтобы иметь пустой блок в коде, потому что пустой код не разрешен в циклах, определении функции, определении класса. Таким образом, операторpass
не приведет к операции (NOP). Как правило, мы используем его в качестве заполнителя, когда не знаем, какой код написать или добавить код в будущем выпуске.Допустим, у нас есть класс, который еще не реализован, но мы хотим его реализовать в будущем, и у них не может быть пустого тела, потому что интерпретатор выдает ошибку. Так что используйте
передать оператор
, чтобы создать тело, которое ничего не делает.Пример
класс Демонстрация: pass
В приведенном выше примере мы определили класс без тела. Чтобы избежать ошибок при его выполнении, мы добавили оператор
pass
в тело класса.Свойства объекта
Каждый объект имеет свои свойства. Другими словами, мы можем сказать, что свойство объекта является ассоциацией между именем и значением .
Например, автомобиль — это объект, а его свойствами являются цвет автомобиля, люк на крыше, цена, производитель, модель, двигатель и так далее. Здесь цвет — это имя, а красный — значение . Свойства объекта — это не что иное, как переменные экземпляра.
Свойства объектаИзменение свойств объекта
Каждый объект имеет связанные с ним свойства. Мы можем установить или изменить свойства объекта после инициализации объекта, вызвав свойство напрямую с помощью оператора точки.
ОБЪЕКТ.СВОЙСТВО = значение
Пример
класс Фрукты: def __init__(я, имя, цвет): self.name = имя self.color = цвет деф-шоу (я): print("Фрукт есть", self. name, "и Цвет есть", self.color) # создание объекта класса obj = Фрукт ("Яблоко", "красное") # Изменение свойств объекта obj.name = "клубника" # вызов метода экземпляра с использованием объекта obj obj.show() # Выходные данные Fruit — клубника, а Color — красный
Удалить свойства объекта
Мы можем удалить свойство объекта, используя ключевое слово
del
. После его удаления, если мы попытаемся получить к нему доступ, мы получим сообщение об ошибке.класс Фрукты: def __init__(я, имя, цвет): self.name = имя self.color = цвет деф-шоу (я): print("Фрукт есть", self.name, "и Цвет есть", self.color) # создание объекта класса obj = Фрукт ("Яблоко", "красное") # Удаление свойств объекта del obj.name # Доступ к свойствам объекта после удаления печать (имя объекта) # Вывод: AttributeError: Объект "Фрукт" не имеет атрибута "имя"
В приведенном выше примере, как мы видим, имя атрибута было удалено, когда мы пытаемся напечатать или получить доступ к этому атрибуту, появляется сообщение об ошибке.
Удалить объекты
В Python мы также можем удалить объект, используя ключевое слово
del
. Объект может быть чем угодно, например class object,list
,tuple
,set
и т. д.0003класс Сотрудник: отдел = "ИТ" деф-шоу (я): print("Отдел ", self.depatment) эмп = Сотрудник () emp.show() # удалить объект дель эмп # Доступ после удаления объекта emp.show() # Вывод: NameError: имя 'emp' не определено
В приведенном выше примере мы создаем объект
emp
классаEmployee
. После этого с помощью ключевого словаdel
мы удалили этот объект.Классы и объекты I Учебники и примечания | Питон
Классы и методы Python
Python — это «объектно-ориентированный язык программирования». Это означает, что почти весь код реализован с использованием специальной конструкции, называемой классами. Программисты используют классы для хранения связанных вещей вместе. Это делается с помощью ключевого слова «класс», которое представляет собой группу объектно-ориентированных конструкций.
К концу этого урока вы сможете:
- Определить, что такое класс
- Опишите, как создать класс
- Определить, что такое метод
- Опишите, как создать экземпляр объекта
- Опишите, как создавать атрибуты экземпляра в Python
Что такое класс?
Класс — это шаблон кода для создания объектов. Объекты имеют переменные-члены и поведение, связанное с ними. В python класс создается ключевым словом
class
.Объект создается с помощью конструктора класса. Затем этот объект будет называться экземпляром
9.0170 класса. В Python мы создаем экземпляры следующим образом:
Instance = class(arguments)
Как создать класс
Простейший класс можно создать с помощью ключевого слова class. Например, давайте создадим простой пустой класс без каких-либо функций.
>>> класс Змея: ... проходить ... >>> змея = змея() >>> печать(змейка) <__main__.Объект змеи по адресу 0x7f315c573550>
Атрибуты и методы в классе:
Класс сам по себе бесполезен, если с ним не связана какая-либо функциональность. Функциональность определяется установкой атрибутов, которые действуют как контейнеры для данных и функций, связанных с этими атрибутами. Эти функции называются методами.
Атрибуты:
Вы можете определить следующий класс с именем Snake. Этот класс будет иметь имя атрибута
>>> класс Змея: ... name = "python" # установить атрибут `name` класса ...
Вы можете присвоить класс переменной. Это называется созданием объекта. Затем вы сможете получить доступ к атрибутам, которые присутствуют внутри класса, используя точку
.
оператор. Например, в примере Snake вы можете получить доступ к атрибутуname
классаSnake
.>>> # создать экземпляр класса Snake и присвоить его переменной змейке >>> змея = змея() >>> # получить доступ к имени атрибута класса внутри класса Snake. >>> print(snake.name) питон
Методы
Если есть атрибуты, которые «принадлежат» классу, вы можете определить функции, которые будут обращаться к атрибуту класса. Эти функции называются методами. Когда вы определяете методы, вам всегда нужно указывать первый аргумент метода с ключевым словом self.
Например, вы можете определить класс
Snake
, который имеет один атрибутname
и один методchange_name
. Имя изменения метода будет принимать аргументnew_name
вместе с ключевым словомself
.>>> класс Змея: ... имя = "питон" ... ... def change_name(self, new_name): # обратите внимание, что первым аргументом является self ... self.name = new_name # доступ к атрибуту класса с помощью ключевого слова self ...
Теперь вы можете создать экземпляр этого класса
Змея
с переменнойзмея
, а затем изменить имя с помощью методаchange_name
. -