Классы и объекты python
Содержание:
- Введение в ООП в Python
- Краткое введение в ООП
- Overloading Operators
- Переопределение метода
- Создание Класса
- Инкапсуляция
- Список
- LDA для одного предсказателя
- Функции класса
- Создание объекта
- Определение класса
- Объекты
- How to Check an Object’s Class
- Классы в Python
- Условный оператор if
- Объекты
- Destroying Objects (Garbage Collection)
- Create Multiple Functions
- Класс Python
- Полиморфизм в Python
- Классы Python 3: работа с более чем одним объектом
- Инкапсуляция в Python
Введение в ООП в Python
Python — это мультипарадигмальный язык. Это означает, что он поддерживает различные подходы к программированию.
Одной из наиболее популярных парадигм является создание объектов. Она известна как объектно-ориентированное программирование (ООП).
Объект имеет две характеристики:
- атрибуты;
- поведение;
Рассмотрим на примере:
Объект – это попугай:
- имя, возраст, цвет являются атрибутами;
- пение, танцы — это поведение;
Концепция ООП в Python направлена на создание кода для многократного использования. Эта концепция также известна как DRY (Don’t Repeat Yourself).
В Python концепция ООП реализует несколько принципов:
Наследование | Использование элементов из нового класса без изменения существующего класса. |
Инкапсуляция | Скрытие приватных элементов класса от других объектов. |
Полиморфизм | Концепция использования объекта с одинаковым интерфейсом без получения информации о его типе и внутренней структуре. |
Краткое введение в ООП
Объектно-ориентированное программирование (ООП) – технология разработки сложного программного обеспечения, в которой программа строится в виде совокупности объектов и их взаимосвязей.
Объединение данных и действий, производимых над этими данными, в единое целое, которое называется объектом – является одним из основных принципов ООП.
Основными понятиями являются понятие класса и объекта.
Класс является типом данных, определяемым пользователем и представляет собой структуру в виде данных и методов для работы с данными.
Формально Класс — это шаблон, по которому будет сделан объект.
Объект является экземпляром класса. Объект и экземпляр - это одно и то же.
Вот пример. Форма для изготовления печенья – это класс, а само печенье это объект или экземпляр класса, т.е. это конкретное изделие. Печенье имеет размеры, цвет, состав – это атрибуты класса. Также в классе описываются методы, которые предназначены для чтения или изменения данных объекта.
В Python характеристики объекта, называются атрибутами, а действия, которые мы можем проделывать с объектами, — методами. Методами в Python называют функции, которые определяются внутри класса.
Объект = атрибуты + методы
Overloading Operators
Suppose you have created a Vector class to represent two-dimensional vectors, what happens when you use the plus operator to add them? Most likely Python will yell at you.
You could, however, define the __add__ method in your class to perform vector addition and then the plus operator would behave as per expectation −
Example
#!/usr/bin/python class Vector: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self,other): return Vector(self.a + other.a, self.b + other.b) v1 = Vector(2,10) v2 = Vector(5,-2) print v1 + v2
When the above code is executed, it produces the following result −
Vector(7,8)
Переопределение метода
Обратите внимание, что в приведенном выше примере метод __init __() был определен в обоих классах, Triangle и Polygon. Когда это происходит, метод производного класса переопределяет метод базового класса
Это означает, что __init __() в Triangle получает предпочтение перед __init__ в Polygon.
Обычно при переопределении базового метода мы стремимся расширить определение, а не просто заменить его. То же самое делается путем вызова метода в базовом классе из метода в производном классе (вызов Polygon .__ init __() из __init __() в Triangle).
Лучшим вариантом было бы использовать встроенную функцию super(). Итак, super() .__ init __ (3) эквивалентен Polygon .__ init __ (self, 3) и является предпочтительным. Чтобы узнать больше о функции super() в Python, посетите функцию Python super().
Две встроенные функции isinstance() и issubclass() используются для проверки наследования.
Функция isinstance() возвращает True, если объект является экземпляром класса или других классов, производных от него. Каждый класс в Python наследуется от объекта базового класса.
>>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True
Точно так же issubclass() используется для проверки наследования классов.
>>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True
Было полезно224
Нет28
8781cookie-checkНаследование в Python
Создание Класса
Создание класса в Пайтоне – это очень просто. Вот простой пример:
Python
# Python 2.x syntax
class Vehicle(object):
«»»docstring»»»
def __init__(self):
«»»Constructor»»»
pass
1 2 3 4 5 6 7 8 |
# Python 2.x syntax classVehicle(object) «»»docstring»»» def__init__(self) «»»Constructor»»» pass |
Этот класс не делает ничего конкретного, тем не менее, это очень хороший инструмент для изучения. Например, чтобы создать класс, мы используем ключевое слово class, за которым следует наименование класса. В Пайтоне, конвенция указывает на то, что наименование класса должно начинаться с заглавной буквы. Далее нам нужно открыть круглые скобки, за которыми следует слово object и закрытые скобки. «object» — то, на чем основан класс, или наследуется от него. Это называется базовым классом или родительским классом. Большая часть классов в Пайтоне основаны на объекте. У классов есть особый метод, под названием __init__.
Этот метод вызывается всякий раз, когда вы создаете (или создаете экземпляр) объект на основе этого класса. Метод __init__ вызывается единожды, и не может быть вызван снова внутри программы. Другое определение метода __init__ — это конструктор, кстати, этот термин редко встречается в Пайтоне. Вы можете подумать, почему я называю это методом, а не функцией? Функция меняет свое имя на «method», когда она находится внутри класса
Обратите внимание на то, что каждый метод должен иметь как минимум один аргумент, что в случае с обычной функцией уже не вяжется. В Python 3 нам не нужно прямо указывать, что мы наследуем у объекта
Вместо этого, мы можем написать это следующим образом:
Python
# Python 3.x syntax
class Vehicle:
«»»docstring»»»
def __init__(self):
«»»Constructor»»»
pass
1 2 3 4 5 6 7 8 |
# Python 3.x syntax classVehicle «»»docstring»»» def__init__(self) «»»Constructor»»» pass |
Обратите внимание на то, что единственная разница в том, что круглые скобки нам больше не нужны, когда мы основываем наш класс на объекте. Давайте немного расширим наше определение класса и дадим ему некоторые атрибуты и методы
Python
class Vehicle(object):
«»»docstring»»»
def __init__(self, color, doors, tires):
«»»Constructor»»»
self.color = color
self.doors = doors
self.tires = tires
def brake(self):
«»»
Stop the car
«»»
return «Braking»
def drive(self):
«»»
Drive the car
«»»
return «I’m driving!»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
classVehicle(object) «»»docstring»»» def__init__(self,color,doors,tires) «»»Constructor»»» self.color=color self.doors=doors self.tires=tires defbrake(self) «»» Stop the car return»Braking» defdrive(self) «»» Drive the car return»I’m driving!» |
В данном примере мы добавили три атрибута и два метода. Эти три атрибута являются:
Python
self.color = color
self.doors = doors
self.tires = tires
1 2 3 |
self.color=color self.doors=doors self.tires=tires |
Атрибуты описывают автомобиль. У него есть цвет, определенное количество дверей и колес. Также у него есть два метода. Метод описывает, что делает класс. В нашем случае, автомобиль может двигаться и останавливаться. Вы могли заметить, что все методы, включая первый, имеют интересный аргумент, под названием self. Давайте рассмотрим его внимательнее.
Инкапсуляция
Используя ООП в Python, мы можем ограничить доступ к методам и переменным. Это предотвращает изменение данных вне класса. Такой подход называется инкапсуляцией. В Python мы устанавливаем приватный модификатор доступа, используя в качестве префикса подчеркивание одинарное «_» или двойное «_ _» подчеркивание.
Пример 4: Инкапсуляция данных в Python
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Selling Price: {}".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # изменяем цену c.__maxprice = 1000 c.sell() # используем функцию сеттера c.setMaxPrice(1000) c.sell()
Когда мы запустим эту программу, результат будет следующим:
Selling Price: 900 Selling Price: 900 Selling Price: 1000
Сначала мы определили класс Computer . Затем использовали метод __init__() для хранения значения максимальной стоимости продажи компьютера.
Мы попытались изменить цену, но не смогли, потому что Python рассматривает __maxprice, как приватные атрибуты. Чтобы изменить значение, мы использовали функцию сеттера. То есть, setMaxPrice(), которая принимает цену в качестве параметра.
Список
Список (list) представляет тип данных, который хранит набор или последовательность элементов. Для создания списка в квадратных скобках через запятую перечисляются все его элементы.
Создание пустого списка
numbers = []
Создание списка чисел:
numbers = # имя списка numbers, он содержит 5 элементов
Создание списка слов:
words = # имя списка words, он содержит 4 элемента
Создание списка из элементов разного типа
listNum = # имя списка listNum, список содержит целые числа и строки
Для управления элементами списки имеют целый ряд методов. Некоторые из них:
append(item): добавляет элемент item в конец списка
insert(index, item): добавляет элемент item в список по индексу index
remove(item): удаляет элемент item. Удаляется только первое вхождение элемента. Если элемент не найден, генерирует исключение ValueError
clear(): удаление всех элементов из списка
index(item): возвращает индекс элемента item. Если элемент не найден, генерирует исключение ValueError
pop(): удаляет и возвращает элемент по индексу index. Если индекс не передан, то просто удаляет последний элемент.
count(item): возвращает количество вхождений элемента item в список
sort(): сортирует элементы. По умолчанию сортирует по возрастанию. Но с помощью параметра key мы можем передать функцию сортировки.
reverse(): расставляет все элементы в списке в обратном порядке
Кроме того, Python предоставляет ряд встроенных функций для работы со списками:
len(list): возвращает длину списка
sorted(list, ): возвращает отсортированный список
min(list): возвращает наименьший элемент списка
LDA для одного предсказателя
Предположим, у нас есть только один предиктор и что функция плотности нормальная. Затем вы можете выразить функцию плотности как:
Нормальная функция распределения
Теперь мы хотим назначить наблюдениеХ = хдля которогоP_k (Х)самый большой. Если вы подключите функцию плотности вP_k (Х)и взятьжурналВы обнаружите, что хотите максимально увеличить:
Дискриминантное уравнение
Уравнение выше называетсядискриминант.Как видите, это линейное уравнение. Отсюда и название:линейный дискриминантный анализ!
Теперь, предполагая только два класса с равным распределением, вы найдете:
Граничное уравнение
Это граничное уравнение. Графическое представление показано ниже.
Граничная линия для разделения 2 классов с использованием LDA
Конечно, это идеальное решение. В действительности, мы не можем точно рассчитать граничную линию.
Поэтому LDA использует следующее приближение:
Для среднего всех тренировочных наблюдений
Среднее из всех тренировочных наблюдений
Для средневзвешенной выборочной дисперсии для каждого класса
Средневзвешенное значение выборочных отклонений для каждого класса
гдеNколичество наблюдений
Важно знать, что LDA предполагаетнормальное распределениедля каждого классасреднее по классуиобщая разница,
Функции класса
Как любой объект, классы Python могут содержать функции! Находясь внутри класса, функции ведут себя точно так же, как вне его. Единственное отличие — способность функций класса обращаться непосредственно к переменным класса, не принимая их в качестве аргументов.
class Person: def __init__(self, name, gender, age): self.name = name self.gender = gender self.age = age self.country = "USA" def print_info(self): print("Name: {}".format(self.name)) print("Gender: {}".format(self.gender)) print("Age: {}".format(self.age)) print("Country: {}".format(self.country)) def grow_person(self, years_of_growth): self.age = self.age + years_of_growthdef grow_person(current_age, years_of_growth): return current_age + years_of_growth# определение человекаperson_1 = Person("Bob", "Male")# вывод всей информации о Бобе по каждому свойствуprint("Name: {}".format(person_1.name))print("Gender: {}".format(person_1.gender))print("Age: {}".format(person_1.age))print("Country: {}".format(person_1.country))# вывод всей информации о Бобе с помощью функции классаperson_1.print_info()# использование внешней функцииperson_1.age = grow_person(person_1.age, years_of_growth=5)# использование функции классаperson_1.grow_person(years_of_growth=5)
Первая функция класса встречается в строке 9 , которая выводит всю информацию о нашем объекте Person. Заметьте, что теперь, используя переменные класса с , мы можем получить информацию о Бобе из любого места класса! Теперь, когда у нас есть прямой доступ ко всей информации, применять функции к объектам Python стало намного удобнее.
С другой стороны, трудно не заметить, как много кода нам требуется для отображения информации о Бобе с использованием в Python. Ну и наличие функций, специально предназначенных для того, чтобы конкретный тип-класс определялся в рамках этого класса, лучше организует код.
Вторая функция, которую мы здесь написали, называется . Она увеличивает возраст человека на заданное пользователем количество лет. Логично сделать её функцией класса, так как она связана с нашим классом Person. Код в конечном итоге выглядит гораздо более чистым и удобным для восприятия!
Создание объекта
Мы увидели, что объект класса можно использовать для доступа к различным атрибутам.
Его также можно использовать для создания новых экземпляров объекта (создания экземпляров) этого класса. Процедура создания объекта аналогична вызову функции.
>>> harry = Person()
Это создаст новый экземпляр объекта с именем harry. Мы можем получить доступ к атрибутам объектов, используя префикс имени объекта.
Атрибуты могут быть данными или методом. Методы объекта ‒ это соответствующие функции этого класса.
Это означает, что поскольку Person.greet является объектом функции (атрибутом класса), Person.greet будет объектом метода.
class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: <function Person.greet> print(Person.greet) # Output: <bound method Person.greet of <__main__.Person object>> print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet()
Выход
<function Person.greet at 0x7fd288e4e160> <bound method Person.greet of <__main__.Person object at 0x7fd288e9fa30>> Hello
Вы могли заметить параметр self в определении функции внутри класса, но мы вызвали этот метод просто как harry.greet() без каких-либо аргументов. Это все еще работало.
Это потому, что всякий раз, когда объект вызывает свой метод, сам объект передается в качестве первого аргумента. Итак, harry.greet() переводится как Person.greet (harry).
В общем случае вызов метода со списком из n аргументов эквивалентен вызову соответствующей функции со списком аргументов, который создается путем вставки объекта метода перед первым аргументом.
По этим причинам первым аргументом функции в классе должен быть сам объект. Это условно называется self. Его можно назвать иначе, но мы настоятельно рекомендуем следовать правилам.
Теперь вы ознакомились с объектом класса, объектом экземпляра, объектом функции, объектом метода и их различиями.
Определение класса
Вот самая базовая структура определения класса Python.
class ClassName: # list of python class variables # python class constructor # python class method definitions
Теперь поработаем с реальными примерами.
#definition of the class starts here class Person: #initializing the variables name = "" age = 0 #defining constructor def __init__(self, personName, personAge): self.name = personName self.age = personAge #defining class methods def showName(self): print(self.name) def showAge(self): print(self.age) #end of the class definition # Create an object of the class person1 = Person("John", 23) #Create another object of the same class person2 = Person("Anne", 102) #call member methods of the objects person1.showAge() person2.showName()
Этот пример не требует пояснений. Как мы знаем, строки, начинающиеся с символа «#», представляют собой комментарии в Python. Они объясняют исполняемые шаги, а код дает следующий результат.
Определение класса в Python:
class Person:
Эта строка отмечает начало определения класса для класса «Person».
Объекты
Объект – это экземпляр класса. Используйте класс Shark для создания объекта jimmy.
Вы инициализировали объект jimmy как экземпляр класса.
Теперь добавьте методы класса Shark в объект jimmy:
Теперь объект jimmy, созданный на основе класса Shark, использует методы swim() и be_awesome(), которые были вызваны с помощью оператора-точки. Этот оператор позволяет сослаться на атрибут объекта. В этом случае атрибут является методом, и он вызывается со скобками, как любая обычная функция.
Поскольку ключевое слово self является параметром методов, как определено в классе Shark, объект jimmy передается методам. Параметр self позволяет методам ссылаться на атрибуты объекта.
При вызове методов объект jimmy автоматически передается с помощью оператора-точки.
Добавьте объект в файл shark.py:
Запустите программу:
How to Check an Object’s Class
You can check an object’s class with the attribute. Generally, you’ll get the same result when using the function.
Here’s how to output the class of an object (using both syntaxes):
a = «Hello World»
print(type(a))
print(a.__class__)Result
<class 'str'> <class 'str'>
What that tells us is that the string is based on the class.
You can do the same thing for any object. Here are some more examples:
from myPackage.calculations import multiplyMe
print(type(10))
print(type(1.0))
print(type())
print(type((1,2,3)))
print(type({1,2,3}))
print(type({1:»Hello», 2:»World»}))
print(type(multiplyMe))
print(type(max))Result
<class 'int'> <class 'float'> <class 'list'> <class 'tuple'> <class 'set'> <class 'dict'> <class 'function'> <class 'builtin_function_or_method'>
- Python Modules
- Read/Write Files
Классы в Python
Классы похожи на образец или прототип для создания объектов. Они определяются с помощью ключевого слова class.
Давайте определим класс Shark, который имеет две связанные с ним функции:
shark.py
classShark: defswim(self): print("The shark is swimming.") defbe_awesome(self): print("The shark is being awesome.")
Поскольку эти функции объявлены под классом Shark, они называются методами. Методы — это особый вид функции, который определен внутри класса.
Аргументом этих функций является слово self, которое является ссылкой на объекты, созданные на основе этого класса. Чтобы ссылаться на экземпляры (или объекты) класса, self всегда будет первым параметром.
Определение этого класса создает шаблон для объекта Shark, который мы сможем определить позже. То есть, если вы запустите программу, приведенную выше, ничего не будет возвращено.
Условный оператор if
Оператор if позволяет изменить порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Формат оператора может быть записан в двух формах: полной и неполной форме.
if условие: # блок if <операторы>else: # блок else <операторы>
Блок инструкций if будет выполнен, если условие истинно. Если условие ложно, будет выполнен блок инструкций else.
В условном операторе может отсутствовать слово else и последующий блок. Такая инструкция называется неполным ветвлением.
Пример 5. Записать следующее выражение на языке Python.Если a > 0, то b = 1, иначе a = 0.
print («Введите значение a: «) a = int(input())if a > : b = 1 else: b = print(«b = «, b)
Условный оператор elif
if условие_1: # блок if <операторы>elif условие_2: # первый блок elif <операторы>elif условие_3: <операторы>...else # блок else <операторы>
Ключевое слово elifрасшифровывается, как else + if. Это конструкция позволяет реализовать алгоритм выбора необходимого варианта из нескольких альтернативных вариантов. Оператор elif позволяет упростить код. Сделать его легче читаемым и позволяет избежать написание несколько условий if.
Когда исполняется инструкция if-elif-else, в первую очередь проверяется условие_1. Если условие истинно, тогда исполняется блок инструкций if . Следующие условия и операторы пропускаются, и управление переходит к оператору за условным оператором if-elif-else.
Если условие_1 оказывается ложным, тогда управление переходит к следующему условию elif, и проверяется условие_2. Если оно истинно, тогда исполняются инструкции внутри первого блока elif. Последующие инструкции внутри этого блока пропускаются. Этот процесс повторяется, пока не находится условие elif, которое оказывается истинным. Если такого нет, тогда исполняется блок операторов else
Пример.
x = int(input()) y = int(input())if x > and y > print("Первая четверть")elif x > and y < print("Четвертая четверть")elif y > print("Вторая четверть")else: print("Третья четверть")
Объекты
Объект является экземпляром класса. Мы можем взять класс Shark, определенный выше, и использовать его для создания объекта или экземпляра класса.
Создадим объект Shark с именем sammy:
sammy = Shark()
Мы инициализировали объект sammy как экземпляр класса, установив его равным Shark().
Теперь используем два метода с объектом Shark sammy:
sammy = Shark() sammy.swim() sammy.be_awesome()
Объект sammy использует два метода — swim() и be_awesome(). Мы вызвали их с помощью оператора «.», который ссылается на атрибут объекта. В этом случае атрибут является методом, и он вызывается с круглыми скобками.
Поскольку ключевое слово self было параметром методов класса Shark, объект sammy передается методам. Параметр self позволяет методам ссылаться на атрибуты объекта.
Но когда мы вызываем методы, в круглых скобках ничего не передается. Объект sammy автоматически передается с помощью оператора «.» (точки).
Добавим объект в программе:
shark.py
classShark: defswim(self): print("The shark is swimming.") defbe_awesome(self): print("The shark is being awesome.") defmain(): sammy = Shark() sammy.swim() sammy.be_awesome() if __name__ == "__main__": main()
Запустим программу, чтобы узнать, что она делает:
python shark.py Вывод The shark is swimming. The shark is being awesome.
Объект sammy вызывает два метода в функции main(), указывая запустить эти методы.
Destroying Objects (Garbage Collection)
Python deletes unneeded objects (built-in types or class instances) automatically to free the memory space. The process by which Python periodically reclaims blocks of memory that no longer are in use is termed Garbage Collection.
Python’s garbage collector runs during program execution and is triggered when an object’s reference count reaches zero. An object’s reference count changes as the number of aliases that point to it changes.
An object’s reference count increases when it is assigned a new name or placed in a container (list, tuple, or dictionary). The object’s reference count decreases when it’s deleted with del, its reference is reassigned, or its reference goes out of scope. When an object’s reference count reaches zero, Python collects it automatically.
a = 40 # Create object <40> b = a # Increase ref. count of <40> c = # Increase ref. count of <40> del a # Decrease ref. count of <40> b = 100 # Decrease ref. count of <40> c = -1 # Decrease ref. count of <40>
You normally will not notice when the garbage collector destroys an orphaned instance and reclaims its space. But a class can implement the special method __del__(), called a destructor, that is invoked when the instance is about to be destroyed. This method might be used to clean up any non memory resources used by an instance.
Example
This __del__() destructor prints the class name of an instance that is about to be destroyed −
#!/usr/bin/python class Point: def __init__( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ print class_name, "destroyed" pt1 = Point() pt2 = pt1 pt3 = pt1 print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts del pt1 del pt2 del pt3
When the above code is executed, it produces following result −
3083401324 3083401324 3083401324 Point destroyed
Note − Ideally, you should define your classes in separate file, then you should import them in your main program file using import statement.
Create Multiple Functions
You’d normally put more than one function in a class. You can also pass arguments to the functions as you would any other function.
Here’s an example of a class that groups arithmetic related functions:
# Create the class
class Arithmetic:
def Add(self, x, y):
return x + y
def Subtract(self, x, y):
return x — y
def Multiply(self, x, y):
return x * y
def Divide(self, x, y):
return x / y
# Object 1
a = Arithmetic()
print(a.Add(2, 3))
print(a.Subtract(8, 300))
print(a.Multiply(2, 3))
print(a.Divide(30, 5))
# Object 2
b = Arithmetic()
print(b.Add(22, 33))
print(b.Subtract(88, 3333))
print(b.Multiply(77, 99))
print(b.Divide(555, 444))Result
5 -292 6 6.0 55 -3245 7623 1.25
Класс Python
К этому времени все вы должны были уже узнать о типах данных Python. Если вы помните, основные типы данных в Python относятся только к одному виду данных одновременно.
Как бы это было, если бы вы могли объявить тип данных, который сам содержится более одного типа данных и может работать с ними с помощью любой функции? Класс Python дает вам эту возможность.
Класс Python – это план, на котором создаются экземпляры класса.
Простая декларация класса Python
Вот очень базовая структура определения класса Python.
class ClassName: # list of python class variables # python class constructor # python class method definitions
Теперь давайте будем работать с реальными примерами.
#definition of the class starts here class Person: #initializing the variables name = "" age = 0 #defining constructor def __init__(self, personName, personAge): self.name = personName self.age = personAge #defining class methods def showName(self): print(self.name) def showAge(self): print(self.age) #end of the class definition # Create an object of the class person1 = Person("John", 23) #Create another object of the same class person2 = Person("Anne", 102) #call member methods of the objects person1.showAge() person2.showName()
Этот пример в значительной степени явно объяснил. Как мы знаем, линии, начинающиеся с «#», являются комментариями Python. Комментарии объясняют следующие исполняемые шаги. Этот код производит следующий вывод.
class Person:
Эта линия отмечает начало определения класса для класса «человека».
Переменные классов Python
#initializing the variables name = "" age = 0
«Имя» и «возраст» – два участника переменных класса «Человек». Каждый раз, когда мы объявляем объект этого класса, он будет содержать эти две переменные в качестве своего члена. Эта часть необязательна, поскольку они могут быть инициализированы конструктором.
Конструктор класса Python
#defining constructor def __init__(self, personName, personAge): self.name = personName self.age = personAge
Конструктор класса Python – это первый кусок кода, который будет выполнен при создании нового объекта класса.
В первую очередь конструктор может быть использован для поставки значений в переменных элемента. Вы также можете печатать сообщения в конструкторе, подтверждающем, был ли объект создан.
Мы узнаем большую роль конструктора, как только мы узнаем о наследнии питона. Метод конструктора начинается с def __init__. После этого первый параметр должен быть «я», так как он передает ссылку на экземпляр самого класса. Вы также можете добавить дополнительные параметры, как так, как он показан в примере. «Персонал» и «персонаж» – два параметра для отправки, когда должен быть создан новый объект.
Методы класса Python
#defining python class methods def showName(self): print(self.name)
Методы объявлены следующим образом:
def method_name(self, parameter 1, parameter 2, …….) statements…….. return value (if required)
В предварительно указанном примере мы видели, что метод печатает значение «Имя» этого объекта. Мы обсудим намного больше о методах Python в другой день.
Объект класса Python
# Create an object of the class person1 = Person("Richard", 23) #Create another object of the same class person2 = Person("Anne", 30) #call member methods of the objects person1.showAge() person2.showName()
Способ создания объектов в Python довольно прост. Сначала вы поместите имя нового объекта, за которым следует оператор назначения и название класса с параметрами (как определено в конструкторе).
Помните, номер и тип параметров должны быть совместимы с параметрами, полученными в функции конструктора.
Когда объект был создан, могут быть вызваны методы элементов, а атрибуты участников могут быть доступны (при условии, что они доступны).
#print the name of person1 by directly accessing the 'name' attribute print(person1.name)
Это все для оснований класса Python. Когда мы собираемся узнать о объектных объектах Python, такие как наследство, полиморфизм в последующих руководствах, мы узнаем больше о классе Python и его функции. До этого, счастливого кодирования и до свидания! Не стесняйтесь комментировать, если у вас есть какие-либо запросы.
Ссылка: Документация Python.org
Полиморфизм в Python
Это концепция, при которой функция может принимать несколько форм в зависимости от количества аргументов или типа аргументов, переданных функции.
В приведенном выше примере ключевое слово super используется для вызова метода родительского класса. Оба класса имеют метод show_salary. В зависимости от типа объекта, который выполняет вызов этой функции, выходные данные различаются.
Python также имеет встроенные функции, работающие с полиморфизмом. Одним из самых простых примеров является функция print в Python.
Вывод будет таким:
В приведенном выше фрагменте кода:
- Параметр конечного ключевого слова изменил работу функции print. Следовательно, «Привет!» не заканчивалось концом строки.
- len () в третьей строке возвращает int. Печать распознает тип данных и неявно преобразует его в строку и выводит его на консоль.
Классы Python 3: работа с более чем одним объектом
Классы позволяют создавать много похожих объектов на основе одного образца. Чтобы понять, как это работает, добавим еще один объект Shark в нашу программу:
shark.py
classShark: def__init__(self, name): self.name = name defswim(self): print(self.name + " is swimming.") defbe_awesome(self): print(self.name + " is being awesome.") defmain(): sammy = Shark("Sammy") sammy.be_awesome() stevie = Shark("Stevie") stevie.swim() if __name__ == "__main__": main()
Мы создали второй объект Shark с именем stevie, и передали ему имя «Stevie». В этом примере используются методы be_awesome() с sammy и метод swim() со stevie.
Запустим программу:
python shark.py Вывод Sammy is being awesome. Stevie is swimming.
Результат показывает, что мы используем два разных объекта: объект sammy и объект stevie. Они оба относятся к классу Shark.
Классы позволяют создавать более одного объекта по одному и тому же шаблону, не создавая каждый из них с нуля.
Инкапсуляция в Python
Это концепция упаковки данных так, что внешний мир имеет доступ только к открытым свойствам. Некоторые свойства могут быть скрыты, чтобы уменьшить уязвимость. Это так называемая реализация сокрытия данных. Например, вы хотите купить брюки с интернет-сайта. Данные, которые вам нужны, это их стоимость и доступность. Количество предметов и их расположение — это информация, которая вас не беспокоит. Следовательно, эта информация скрыта.
В Python это реализуется путем создания private, protected и public переменных и методов экземпляра.
Private свойства имеют двойное подчеркивание (__) в начале, в то время как protected имеют одиночное подчеркивание (_). По умолчанию, все остальные переменные и методы являются public.
Private атрибуты доступны только внутри класса и недоступны для дочернего класса (если он унаследован). Protected доступны внутри класса, но доступны и дочернему классу. Все эти ограничения сняты для public атрибутов.
Следующие фрагменты кода являются примером этой концепции: