Python Классы

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 Классы и ООП.

Приглашаю всех высказываться в Комментариях. Критику и обмен опытом одобряю и приветствую. В хороших комментариях сохраняю ссылку на сайт автора!

И не забывайте, пожалуйста, нажимать на кнопки социальных сетей, которые расположены под текстом каждой страницы сайта.
Python КлассыПродолжение тут…

Deviz_17

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.