Python Классы — хитрющие понятия ООП.
Python Классы - хитрющие обобщающие понятия Объектно-Ориентированного Программирования, необходимые для усвоения современного подхода к программированию.
Привожу информацию про Python Классы:
Классы Python
Язык Питон ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания: __ (к примеру: __myprivatedefault). Также можно присвоить значение переменной класса извне, например:class Myclass:
common = 10
def __init__(self):
self.myvariable = 3
def myfunction(self, arg1, arg2):
return self.myvariable# Здесь мы объявили класс Myclass. Функция __init__ вызывается автоматически при инициализации классов.
>>> classinstance = Myclass() # Мы инициализировали класс, и переменная myvariable приобрела значение 3, как заявлено в методе инициализации
>>> classinstance.myfunction(1, 2) #Метод myfunction класса Myclass возвращает значение переменной myvariable
3
# Переменная common объявлена во всех классах
>>> classinstance2 = Myclass()
>>> classinstance.common
10
>>> classinstance2.common
10
# Поэтому, если мы изменим ее значение в классе Myclass, изменятся
# и ее значения в объектах, инициализированных классом Myclass
>>> Myclass.common = 30
>>> classinstance.common
30
>>> classinstance2.common
30
# А здесь мы не изменяем переменную класса. Вместо этого
# мы объявляем оную в объекте и присваиваем ей новое значение
>>> classinstance.common = 10
>>> classinstance.common
10
>>> classinstance2.common
30
>>> Myclass.common = 50
# Теперь изменение переменной класса не коснется
# переменных объектов этого класса
>>> classinstance.common
10
>>> classinstance2.common
50# Следующий класс является наследником класса Myclass,
# наследуя его свойства и методы, к тому же класс может
# наследоваться из нескольких классов, в этом случае запись
# такая: class Otherclass(Myclass1, Myclass2, MyclassN)
class Otherclass(Myclass):
def __init__(self, arg1):
self.myvariable = 3
print arg1>>> classinstance = Otherclass(«hello»)
hello
>>> classinstance.myfunction(1, 2)
3
# Этот класс не имеет свойства test, но мы можем
# объявить такую переменную для объекта. Причем
# эта переменная будет членом только classinstance.
>>> classinstance.test = 10
>>> classinstance.test
10
Привожу начальную информацию об ООП:
Объектно-ориентированное программирование на Python — программирование на Python с использованием парадигмы ООП: с самого начала Python проектировался как объектно-ориентированный язык программирования.
Содержание
- 1 Введение
- 1.1 Принципы ООП
- 2 Объекты, типы и классы
- 2.1 Определение класса
- 2.2 Создание экземпляра
- 2.3 Конструктор и деструктор
- 2.4 Время жизни объекта
- 2.5 Инкапсуляция и доступ к свойствам
- 2.6 Полиморфизм
- 2.7 Имитация встроенных типов
- 3 Отношения между классами
- 3.1 Наследование и множественное наследование
- 3.1.1 Порядок разрешения доступа к методам и полям
- 3.1.2 «Новые» и «классические» классы
- 3.2 Агрегация. Контейнеры. Итераторы
- 3.3 Ассоциация и слабые ссылки
- 3.4 Метаклассы
- 4 Методы
- 4.1 Метод
- 4.2 Статический метод
- 4.3 Метод класса
- 4.4 Мультиметоды
- 5 Устойчивость объектов
- 6 Примечания
- 7 Литература
- 8 Ссылки
Введение
Принципы ООП
Согласно Алану Кэю — автору языка программирования Smalltalk — объектно-ориентированным может называться язык, построенный с учетом следующих принципов:
- Все данные представляются объектами
- Программа является набором взаимодействующих объектов, посылающих друг другу сообщения
- Каждый объект имеет собственную часть памяти и может иметь в составе другие объекты
- Каждый объект имеет тип
- Объекты одного типа могут принимать одни и те же сообщения (и выполнять одни и те же действия)
Объекты, типы и классы
Определение класса
Для определения класса используется оператор
class
:class имя_класса(надкласс1, надкласс2, ...): # определения атрибутов и методов классаУ класса могут быть базовые (родительские) классы (надклассы), которые, если они есть, указываются в скобках после имени определяемого класса.
Минимально возможное определение класса выглядит так:
class A: passВ терминологии Python члены класса называются атрибутами, функции класса — методами, а поля класса — свойствами (или просто атрибутами).
Определения методов аналогичны определениям функций, но (за некоторыми исключениями, о которых ниже) методы всегда имеют первый аргумент, называемый по общепринятому соглашению
self
:class A: def m1(self, x): # блок кода методаОпределения атрибутов — обычные операторы присваивания, которые связывают некоторые значения с именами атрибутов.
class A: attr1 = 2 * 2В языке Python класс не является чем-то статическим, поэтому добавить атрибуты можно и после определения:
class A: pass def myMethod(self, x): return x * x A.m1 = myMethod A.attr1 = 2 * 2Создание экземпляра
Для создания объекта — экземпляра класса (то есть инстанцирования класса), достаточно вызвать класс по имени и задать параметры конструктора:
class Point: def __init__(self, x, y, z): self.coord = (x, y, z) def __repr__(self): return "Point(%s, %s, %s)" % self.coord>>> p = Point(0.0, 1.0, 0.0) >>> p Point(0.0, 1.0, 0.0)Переопределив классовый метод __new__, можно контролировать процесс создания экземпляра. Этот метод вызывается до метода
__init__
и должен вернуть новый экземпляр, либоNone
(в последнем случае будет вызван__new__
родительского класса).Метод
__new__
используется для управления созданием неизменчивых (immutable) объектов, управления созданием объектов в случаях, когда__init__
не вызывается, например, при десериализации (unpickle). Следующий код демонстрирует один из вариантов реализации шаблона Одиночка:>>> class Singleton(object): obj = None # Атрибут для хранения единственного экземпляра def __new__(cls,*dt,**mp): # класса Singleton. if cls.obj is None: # Если он еще не создан, то cls.obj = object.__new__(cls,*dt,**mp) # вызовем __new__ родительского класса return cls.obj # вернем синглтон ... >>> obj = Singleton() >>> obj.attr = 12 >>> new_obj = Singleton() >>> new_obj.attr 12 >>> new_obj is obj # new_obj и obj - это один и тот же объект True
Буду постепенно осваивать Python Классы и ООП.
Приглашаю всех высказываться в Комментариях. Критику и обмен опытом одобряю и приветствую. В хороших комментариях сохраняю ссылку на сайт автора!
И не забывайте, пожалуйста, нажимать на кнопки социальных сетей, которые расположены под текстом каждой страницы сайта.
Продолжение тут…