Заметки по Python (11): инкапсуляция, такая как объектно-ориентированное программирование

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

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

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

понимание упаковки

упаковка(Encapsulation): абстракция свойств и методов

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

    Делится на частную собственность и государственную собственность

    • частная собственность: доступ возможен только внутри класса
    • общественная собственность: можно получить доступ по классу, имени объекта

    Вы можете открыть или скрыть атрибуты, а также скрыть внутренний механизм атрибутов.

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

    Делятся на приватные методы и публичные методы

    • частный метод: доступ возможен только внутри класса
    • общедоступный метод: можно получить доступ по классу, имени объекта

    Вы можете открыть или скрыть метод, скрывая внутреннюю логику метода.

  • Цель состоит в том, чтобы сформировать интерфейс для внешних управляемых свойств и методов.

Чтобы сделать процесс упаковки и кодовые данные называться классом, выражены как: класс - свойства - метод

Свойства частного класса, свойства открытого класса, свойства частного экземпляра и свойства общедоступного экземпляра

выставлять свойства класса

Атрибуты общедоступного класса — это атрибуты класса, грамматическая структура

class ClassName:
    <类属性名> = <类属性初值>
    def __init__(self,[参数1], [参数2], ...[参数n]):
        self.<实例属性名> = <实例属性初值>
    ...

свойства частного класса

Доступ к закрытым свойствам класса может получить только текущий класс, а не подклассы. Грамматические структуры

class ClassName:
    <__私有类属性名> = <私有类属性初值>
    def __init__(self,[参数1], [参数2], ...[参数n]):
        self.<实例属性名> = <实例属性初值>
    ...

.<类属性>или<对象名>.<类属性>способ доступа

Эффективно обеспечивать управляемость обслуживанием атрибутов

Пример кода выглядит следующим образом:

class TestClass:
    __number = 0

    def __init__(self, num_value):
        for i in range(num_value + 1):
            TestClass.__number += i

    @classmethod  # 类方法
    def sum_number(cls):
        return TestClass.__number


value1 = TestClass(100)
print(TestClass.sum_number())  # 5050
# print(value1.__number)  # AttributeError: 'TestClass' object has no attribute '__number'

Визит на вынос в классе.__numberсообщитAttributeErrorаномальный

Показать свойства экземпляра

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

class <类名>:
    <类属性名> = <类方法值>
    def __init__(self, <参数列表>):
        self.<实例属性名> = <实例属性值>
    ...

свойства частного экземпляра

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

class <类名>:
    <类属性名> = <类方法值>
    def __init__(self, <参数列表>):
        self.<__私有实例属性名> = <实例属性值>
    ...

.<类属性>или<对象名>.<类属性>способ доступа

Эффективно обеспечивать управляемость обслуживанием атрибутов

образец кода

class TestClass:

    def __init__(self, num_value):
        self.__number = 0
        for i in range(num_value + 1):
            self.__number += i

    def sum_number(self):
        return self.__number


value1 = TestClass(100)
print(value1.sum_number())  # 5050
# print(value1.__number)  # AttributeError: 'TestClass' object has no attribute '__number'

Частная собственность не обязательно действительно частная

Двойное подчеркивание частного свойства — это просто соглашение о преобразовании.После преобразования исходное имя в классе изменилось, что является формой частного свойства.

образец кода

class TestClass:

    def __init__(self, num_value):
        self.__number = 0
        for i in range(num_value + 1):
            self.__number += i

    def sum_number(self):
        return self.__number


value1 = TestClass(100)
print(value1.sum_number())  # 5050
print(value1._TestClass__number)  # 5050
# 可以通过 对象名._类名__属性 的方式来访问

в состоянии пройти对象名._类名__属性способ доступа.

частные и публичные методы

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

class <类名>:
    def <__私有方法名>(self, <参数列表>):
        ...

При определении частного метода перед именем свойства требуется два символа подчеркивания (__).

Все виды методов можно превратить в приватные, добавив двойную строку вниз.

Частный метод формально защищает функциональную логику, используемую внутри класса Python.

Частные свойства и публичность — это логика программиста, а не логика безопасности, и они придают большое значение соглашениям.

Зарезервированные свойства класса

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

  • Зарезервированные свойства также называются специальными свойствами.
  • Начинайте и заканчивайте двойным подчеркиванием
  • Роль заключается в предоставлении унифицированного интерфейса атрибутов для понимания классов Python.
  • Значение атрибута имеет особое значение и используется сразу после определения класса.

использовать только<类名>Доступ к зарезервированным свойствам

зарезервированное имущество описывать
__name__ класс существительное
__qualname__ от.отдельные имена классов, начиная с глобального пространства имен шаблона
__bases__ Имя базового класса, от которого наследуется класс

Зарезервированные методы класса

Зарезервированные методы — это методы, зарезервированные интерпретатором Python, начинающиеся и заканчивающиеся двойным подчеркиванием.

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