Similar presentations:
Python. Основы ООП
1.
PythonОсновы ООП
2.
Объектно-ориентированноепрограммирование
Python проектировали
программирования.
как
объектно-ориентированный
язык
Построен с учетом следующих принципов:
1. Все данные в нем являются объектами.
2. Программа представляет собой набор взаимодействующих объек
тов, посылающих друг другу сообщения.
3. Каждый объект имеет собственную часть памяти и может включа
ть в себя другие объекты.
4. Каждый объект имеет тип.
5. Все объекты одного типа могу принимать одни и е же сообщения
( и выполнять одни и те же действия).
3.
Основные понятияОбъектно-ориентированная программа – это совокупность взаим
одейсвующих объектов.
Над
объектами
им сообщения).
можно
производить
операции
(посылая
Сообщения
это
запросы
к
объекту
выполнить
некоторые
действия,
т.е.
взаимодействие
объектов
заключается в вызове методов одних объектов другими.
Характеристики
объекта
поведения – это методы.
–
это
атрибуты,
способы
Каждый объект принадлежит определенному классу (типу),
который задает поведение объектов, созданных на его
основе.
Класс — это описание объектов определенного типа.
Объект,
созданный
на
основе
называется экземпляром класса.
некоторого
класса,
4.
Описание классаclass название_класса:
атрибуты_класса
методы_класса
Пример простейшего класса
class Person:
pass
Определение объектов(экземпляров)класса Person
class Person:
pass
tom = Person()
bob = Person()
# определение объекта tom
# определение объекта bob
Для создания объекта применяется специальная функция - конструктор, к
оторая называется по имени класса и которая возвращает объект класса.
Каждый класс по умолчанию имеет конструктор без параметров.
Вызов конструктора, который возвращает объект класса Person()
tom = Person()
Через ключевое слово self можно обращаться внутри класса к функциональ
ности текущего объекта:
self.атрибут
self.метод
# обращение к атрибуту
# обращение к методу
5.
АтрибутыПо умолчанию атрибуты в классах являются общедоступными, значит из
любого места программы можно изменить значение атрибута объекта.
class Person:
name="NOname"
age=0
p=Person()
print(f"Имя {p.name} возраст {p.age} лет")
# Имя NOname возраст 0 лет
p.age=18
print(f"Имя {p.name} возраст {p.age} лет")
#Имя NOname возраст 18 лет
6.
КонструкторыОпределить в классах конструктор явным образом можно с помощью спе
циального метода __init__() (по два прочерка с каждой стороны).
class Person:
def __init__(self, person_name="Noname",person_age=0):
self.name=person_name
self.age=person_age
p1=Person()
print(f"Имя {p1.name} возраст {p1.age} лет")
# Имя NOname возраст 0 лет
p2=Person('Иван')
print(f"Имя {p2.name} возраст {p2.age} лет")
#Имя Иван возраст 0 лет
p2=Person('Иван',20)
print(f"Имя {p2.name} возраст {p2.age} лет")
#Имя Иван возраст 20 лет
7.
Инкапсуляция. СвойстваИнкапсуляция является фундаментальной концепцией объектно-ориентированного п
рограммирования. Она предотвращает прямой доступ к атрибутам объекта из вызыва
ющего кода.
Инкапсуляция скрытие деталей реализации внутри класса. Атрибуты класса можно с
делать закрытыми и ограничить доступ к ним через специальные методы, которые так
же называются свойствами.
class Person:
def __init__(self, age):
self.__age = age
def set_age(self, age):
if 1 < age < 110:
self.__age = age
else:
print("Недопустимый возраст")
def get_age(self):
return self.__age
p=Person(23)
print(p.age) # недоступен вне класса
p.set_age(42)
print(p.get_age()) #42
p.set_age(-3) # Недопустимый возраст
8.
Аннотации свойствДля создания свойства-геттера над свойством устанавливается аннотаци
я @property.
Для создания свойства-сеттера над свойством устанавливается аннотаци
я имя_свойства_геттера.setter.
Свойство-сеттер определяется после свойства-геттера.
И сеттер, и геттер называются одинаково.
class Person:
def __init__(self, age,name):
self.__age = age
@property
def age(self):
return self.__age
@age.setter
def age(self, age):
if 1 < age < 110:
self.__age = age
else:
print("Недопустимый возраст")
p=Person(23,"Иван")
p.age=40
print(f"возраст {p.age}") # возраст 40
9.
Атрибуты классаАтрибуты класса являются общими для всех объектов класса
class Person:
type = "Person"
print(Person.type)
# Person
Person.type = "Class Person"
print(Person.type)
# Class Person
p=Person()
p.type='Homosapian'
print(p.type) # Homosapian
print(Person.type) # Class Person
Для обращения к атрибутам класса нужно использовать имя класса,
например: Person.type.
Значения атрибутов класса можно получать и изменять.
10.
Статические методыКроме обычных методов класс может определять статические методы.
Такие методы предваряются аннотацией @staticmethod и относятся в
целом к классу. Статические методы обычно определяют поведение, ко
торое не зависит от конкретного объекта
class Person:
__type = "Person"
@staticmethod
def print_type():
print(Person.__type)
Person.print_type() #Person - обращение к статичес
кому методу через имя класса
tom = Person()
tom.print_type()
# Person - обращение к статичес
кому методу через имя объекта
programming