Заметки по Python (10): такие понятия, как объектно-ориентированное программирование

Python Технологии Nuggets призывают к публикации
Заметки по Python (10): такие понятия, как объектно-ориентированное программирование

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~

Основные понятия объектно-ориентированного подхода

все является объектом

Все типы данных в языке Python — это объекты, функции — это объекты, а модули — это объекты.

Все классы в Python наследуются от самого базового объекта класса.

Операционные функции типов данных в языке Python — это все проявления методов класса.

Объектно-ориентированное программирование

объектно-ориентированное программированиеООП (объектно-ориентированное программирование)

  • ООП: объектно-ориентированное программирование, идея программирования, которая фокусируется на высоко абстрактном повторно используемом коде.
  • ООП рассматривает объект как базовую единицу программы, объект содержит данные и функции для управления данными.
  • Суть ООП заключается в том, чтобы абстрагировать решение проблем в объектно-ориентированные компьютерные программы.
  • ООП очень полезен в крупномасштабных или сложных проектах, ООП можетУвеличьте совместный доход
  • OOPсамая важная ценностьлежит вповторное использование кода
  • ООП — это просто стиль программирования, а не продвинутый способ решения проблем.

Разница между процессно-ориентированным и объектно-ориентированным

ориентированный на процессЭтапы процесса решения проблемыСпособ написания программ для ядра, объектно-ориентированный наПостроение и применение проблемного объектаСпособ написания программ для ядра, все проблемы, которые можно решить с помощью ООП, могут быть решены процессно-ориентированным.

Объектно-ориентированные функции

  • упаковка (Encapsulation): Абстракция свойств и методов с использованием данных и методов манипулирования данными для формирования объектной логики.

    • Абстракция методов: определение, изоляция и защита атрибутов класса (переменных)

      • Абстракция объекта: определение, изоляция и защита методов (функций) класса
      • Цель состоит в том, чтобы сформировать интерфейс для внешних управляемых свойств и методов класса.
  • наследовать: высокоуровневая абстракция для повторного использования кода, использующая отношения наследования между объектами для формирования повторного использования кода.

    • Наследование — одна из квинтэссенций объектно-ориентированного программирования.

      • Реализует повторное использование кода на высоком уровне абстракции в единицах классов.
      • Наследование — это процесс, посредством которого вновь определенный класс может почти полностью использовать свойства и методы исходного класса.
  • полиморфизм: абстракция гибкости метода, делающая работу с объектами более гибкой, а код более пригодным для повторного использования.

    • Полиморфизм типов параметров: способность метода обрабатывать несколько типов.

      • Параметрический полиморфизм: способность метода принимать несколько параметров.
      • Полиморфизм — это традиционная концепция ООП, Python естественным образом поддерживает полиморфизм и не требует специального синтаксиса.

Объектно-ориентированная терминология Python

своего рода(Class) и объект (Object)

  • Классы: логические абстракции и шаблоны, которые создают объекты, набор переменных и определенное расположение функций.

  • Объект: объект, который конкретно выражает данные и операции, эквивалентный «переменной» в программе. В том числе: объект класса, объект экземпляра

    После завершения определения класса по умолчанию генерируется объект класса, и каждому классу однозначно соответствует объект класса, который используется для хранения основной информации об этом накоплении.Объект класса является экземпляром типа, который выражается как тип типа;

    • экземпляр объекта(Instance Object): объект, сгенерированный после экземпляра класса Python, называемый: объект
    • Глобально существует только один объект класса, и может быть сгенерировано несколько объектов-экземпляров.
  • Атрибут: «переменная», в которой хранятся данные (то есть переменная, определенная в классе), используемая для описания некоторых характерных параметров класса. В том числе: атрибуты класса, атрибуты экземпляра

    • атрибут класса(Class Attribute): свойства объектов класса, общие для всех объектов экземпляра; определенные внутри класса, в__init__вне функции. Как правило, атрибуты, общие для классов, определяются как атрибуты класса.
    • свойства экземпляра(Instance Attribute): Атрибуты объектов экземпляра, обычно определяемые в функциях в классах, и атрибуты экземпляра могут быть уникальными для экземпляра.
  • Метод: «метод» (то есть переменная, определенная в классе), который работает с данными, используется для задания операционной функции класса. В том числе: методы класса, методы экземпляра, бесплатные методы, статические методы, зарезервированные методы.

    • метод класса(Class Method): методы объектов класса, общие для всех объектов экземпляра
    • метод экземпляра(Instance Method): метод объекта-экземпляра, используемый исключительно каждым объектом-экземпляром, наиболее часто используемая форма,
    • бесплатный метод(Namespace Method): обычная функция в классе, управляемая пространством имен, в котором находится класс, и исключительно для объектов класса
    • статический метод(Static Method): обычная функция в классе, совместно используемая объектами и объектами-экземплярами
    • зарезервированный метод(Reserved Method): Метод с двойным подчеркиванием Kash и end зарезервирован для использования.
  • Создание экземпляра: процесс перехода от класса к объекту, все «объекты» являются производными от «класса».

Построение класса Python

Базовая конструкция классов

В Python используйтеclassКлючевое слово плюс имя класса для определения класса, с помощью отступа мы можем идентифицировать блок кода класса, точно так же, как определение функции. Грамматические структуры

class <类名>:
    [类描述“documentation string”]
    <语句块>

Поскольку Python является языком сценариев, класс определения не ограничивает местоположение и может быть включен в ветви или другие подчиненные блоки операторов, а выполнение необходимо только.

  • Имя класса: может быть любым допустимым идентификатором, обычно первая буква заглавная.
  • Описание класса: В первой строке после определения класса он определен в виде независимой строки, пройти после определения<类名>.__doc__посещать

образец кода

class TestClass:
    """这是一个测试的类"""
    print("Hello Class Object")


print(TestClass.__doc__)
print(type(TestClass))

'''
----输出结果----

Hello Class Object
这是一个测试的类
<class 'type'>
'''

Операторы, непосредственно содержащиеся в объекте класса, будут выполняться, все определяют класс, насколько это возможно, чтобы не содержать оператор непосредственно в классе.

экземпляр объекта: Объекты-экземпляры — наиболее распространенный способ использования классов Python.

Создать синтаксическую структуру объекта экземпляра

<对象名> = <类名>([参数])

пример кода

class TestClass:
    print("一碗周")


tt = TestClass()
print(type(tt))
'''
----输出结果----

一碗周
<class '__main__.TestClass'>
'''

конструктор класса

концепция

  • Конструктор класса используется дляСоздать экземпляр объекта из классапроцесс
  • Конструктор класса предоставляет метод ввода параметров для создания экземпляра объекта.
  • Конструктор классасвойства экземпляраОпределение и назначение

Python использует предопределенные__init__()как конструктор

Грамматические структуры

class ClassName:
    def __init__(self,[参数1], [参数2], ...[参数n]):
        <语句块>
    ...

пример кода


class TestClass:
    def __init__(self, name):
        print(name)


text1 = TestClass("张三")  # 张三
text2 = TestClass("李四")  # 李四

через конструктор__init__Аргументы могут быть предоставлены Python

**__init__()**Инструкции по применению

Параметры: первым соглашением о параметрах является self, который представляет сам экземпляр класса, а остальные параметры являются параметрами экземпляра (selfОн используется внутренне, зарезервирован по умолчанию, а параметры, введенные другими пользователями, помещаются вselfпозже)

Имя функции: определяется внутри интерпретатора Python и представляется двойным подчеркиванием (__) начало и конец

Возвращаемое значение: конструктор не имеет возвращаемого значения или возвращает None, в противном случае генерируется исключение TypeError.

**self**Представляет экземпляр класса внутри определения класса

  • slefявляется параметром класса объектно-ориентированного соглашения Python.
  • selfПредставляет экземпляр класса внутри класса,selfИспользуется для объединения доступа к свойствам и методам, связанным с экземпляром.
  • Напротив, имя класса представляет сам объект класса.

свойства класса

Атрибуты — это переменные, определенные внутри класса, структура синтаксиса↓

class ClassName:
    <类属性名> = <类属性初值>
    def __init__(self,[参数1], [参数2], ...[参数n]):
        self.<实例属性名> = <实例属性初值>
    ...
  • Доступ к свойствам класса:<类名>.<类属性>или<对象名>.<类属性>
  • Доступ к свойствам экземпляра:<对象名>.<实例属性>

пример кода

class TestClass:
    count = 0  # 类属性

    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = name
        TestClass.count += 1  # 实例化一次 count+1


students1 = TestClass("张三", "18")
students2 = TestClass("李四", "19")
print("总数:", TestClass.count)  # 总数: 2
print(students1.name, students2.name)  # 张三 李四

метод класса

  1. Метод экземпляра: метод экземпляра — это функция, определенная внутри класса, независимая от объекта экземпляра, структуры синтаксиса

    class ClassName:
        def <方法名>(self, <参数列表>):
            ...
    

    <方法名>(<参数列表>)Способ определения первого параметра с использованием метода экземпляра:self

    пример кода

    class TestClass:
        def __init__(self, number):
            self.number = number
    
        def sum_number(self):  # 实例方法
            sum_num = 0
            for i in range(self.number + 1):  # 因为循环不会到最后一个数字
                sum_num += i
            return sum_num
    
    
    number1 = TestClass(100)
    number2 = TestClass(10)
    print(number1.sum_number())  # 5050
    print(number2.sum_number())  # 55
    
  2. Метод класса: метод класса — это функция, связанная с объектом класса, общая для всех объектов экземпляра, синтаксическая структура↓

    class ClassName:
        @classmethod
        def <方法名>(cls, <参数列表>):
            ...
    

    <方法名>(<参数列表>)или<类名>.<方法名>(<参数列表>)метод, метод класса содержит хотя бы один параметр, представляющий объект класса, рекомендуется использовать@classmethodэто декоратор, необходимый для определения методов класса

    метод классаМожно управлять только свойствами классаидругие методы класса, не может управлять свойствами и методами экземпляра.

    пример кода

    class TestClass:
        sum_num = 0
    
        def __init__(self, number):
            self.number = number
    
        def sum_number(self):
            for i in range(self.number + 1):  # 因为循环不会到最后一个数字
                TestClass.sum_num += i
            return TestClass.sum_num
    
        @classmethod
        def test(cls):  # 类方法
            test_value = TestClass.sum_num * 2
            return test_value
    
    
    value1 = TestClass(100)
    print(value1.sum_number())  # 5050
    print(value1.test())  # 10100
    
  3. Собственный метод: Собственный метод — это обычная функция, определенная в пространстве имен класса, синтаксис следующий:

    class ClassName:
        def <方法名>(<参数列表>):
            ...
    

    .<方法名>(<参数列表>)способ использования,<类名>Представляет пространство имен. собственный метод не требуетselfилиclsТакие параметры не могут иметь параметров. Собственные методы могут работать только с атрибутами и методами класса, но не могут работать с атрибутами и методами экземпляра. Использовать бесплатные методы можно только<类名>

    Строго говоря, свободный метод — это не метод, а функция, определенная в классе

    пример кода

    class TestClass:
        sum_num = 0
    
        def __init__(self, number):
            self.number = number
    
        def sum_number(self):
            for i in range(self.number + 1):  # 因为循环不会到最后一个数字
                TestClass.sum_num += i
            return TestClass.sum_num
    
        def test():  # 自由方法
            test_value = TestClass.sum_num * 2
            return test_value
    
    
    def test_out():  # 等于上面的那个自由方法
        test_out_value = TestClass.sum_num * 2
        return test_out_value
    
    
    value = TestClass(100)
    print(value.sum_number())  # 5050
    print(TestClass.test())  # 10100
    print(test_out())  # 10100
    

    Свободные методы, определенные в классе, также могут быть определены вне его.

  4. Статический метод: обычная функция, определенная в классе, которая может использоваться всеми объектами экземпляра.

    class ClassName:
        @staticmethod
        def <方法名>(<参数列表>):
            ...
    

    .<方法名>(<参数列表>)или<类名>.<方法名>(<参数列表>)Способ использования статических методов также может не иметь параметров, под которыми можно понимать собственные методы, которые можно вызывать по имени объекта.@staticmethodЭто декоратор и требуется для определения статических методов.Как и свободные методы, статические методы могут работать только с атрибутами класса и методами класса, но не могут работать с атрибутами экземпляра и методами экземпляра.<类名>или<对象名>.

    образец кода

    class TestClass:
        sum_num = 0
    
        def __init__(self, number):
            self.number = number
    
        def sum_number(self):
            for i in range(self.number + 1):  # 因为循环不会到最后一个数字
                TestClass.sum_num += i
            return TestClass.sum_num
    
        @staticmethod  # 静态方法装饰器
        def test():
            test_value = TestClass.sum_num * 2
            return test_value
    
    
    value = TestClass(100)
    print(value.sum_number())  # 5050
    print(TestClass.test())  # 10100
    print(value.test())  # 10100
    
  5. Зарезервированный метод: методы с двойным подчеркиванием Kash и end зарезервированы для использования. Грамматическая структура↓

    class ClassName:
        def <保留方法名>(<参数列表>):
            ...
    

    Зарезервированный метод обычно соответствует определенной операции класса, при использовании оператора вызов является зарезервированным методом в интерпретаторе Python.