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

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

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

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

Понимание операционных концепций

операция (Operation) является абстракцией логики операции

  • Операция воплощает в себе своего рода логику операции.В широком смысле любая программа является операцией
  • Интерпретатор Python резервирует пакет операционных интерфейсов через зарезервированный метод, который необходимо перегрузить.
  • Зарезервированный метод обычно соответствует оператору, а операция в Python отражается как перегрузка оператора
  • Операция по существу воплощает отношения взаимодействия, отношения сдерживания и отношения обычных операций.

Ограничения арифметической перегрузки

  • Операторы встроенных типов в языке Python нельзя перегружать
  • Вы не можете создавать новые операторы, вы можете сделать это только перегрузив
  • is,and,not,orне может быть перегружен

перегрузка оператора

арифметические операторы

  • Унарный оператор:+,-,~
  • Бинарные операторы:+,-,*,/,//,%,divmod(),pow(),**,<<,>>,&,^,|
зарезервированный метод соответствующая операция описывать
.__neg__(self) -obj Определить логику операции отрицания объекта
.__pos__(self) +obj Определить логику работы объекта, принимающего положительные
.__abs__(self) abs(obj) Определить логику работы абсолютного значения объекта
.__invert__(self) ~obj Определить логику операции отрицания объекта
.__add__(self, other) obj + other Определяет логику операции добавления двух объектов
.__sub__(self, other) obj - other Определяет логику операции для вычитания двух объектов
.__mul__(self, other) obj * other Определяет логику операции умножения двух объектов
.__truediv__(self, other) obj / other Определяет логику разделения двух объектов
.__floordiv__(self, other) obj // other Определяет логику операции целочисленного деления двух объектов
.__mod__(self, other) obj % other Определяет логику работы двух объектных модулей
.__divmod__(self, other) divmod(obj, other) Определяет логику операции для деления по модулю двух объектов
.__pow__(self, other) obj ** other Определить логику работы объекта питания
.__lshift__(self, other) obj << other Определить логику работы объекта сдвига влево
.__rshift__(self, other) obj >> other Определить логику работы сдвига объекта вправо
.__and__(self, other) obj & other Определить два объекта в арифметической логике
.__xor__(self, other) obj ^ other Определить логику операции побитового XOR двух объектов
.__or__(self, other) `obj other`

оператор сравнения

Оператор сравнения:<,<=,==,!=,>,>=

зарезервированный метод соответствующая операция
.__lt__(self, other) obj < other
.__le__(self, other) obj <= other
.__eq__(self, other) obj == other
.__be__(self, other) obj != other
.__gt__(self, other) obj > other
.__ge__(self, other) obj >= other

Арифметическая перегрузка для сравнения двух объектов

операция члена

  • Участники получают:[],def,.reversed()
  • Решение участника:in
зарезервированный метод соответствующая операция описывать
.__getitem__(self, key) obj[k] Определяет логику операции для получения порядкового номера элемента K в объекте, где K — целое число.
.__setitem__(self, key, v) obj[k] = v Определить логику работы элемента порядкового номера K в объекте присвоения
.__delitem__(self, key) del obj[k] Определить логику операции для удаления элемента порядкового номера K в объекте
.__reversed__(self) obj.reversed() Определение логики работы реверсирования объекта
.__contains__(self, item) item in obj Определите логику операции, соответствующую оператору in

другие операции

Встроенные функции Python:rep(),str(),len(),int(),flaot,complex(),round(),bytes(),bool(),format(),.format(общий метод)

зарезервированный метод соответствующая операция описывать
__repr__(self) repr(obj) Определить логику работы печатной строки объекта
__str__(self) str(obj) Определить логику операции преобразования строки объекта
__len__(self) len(obj) Определить логику операции длины объекта
__int__(self) int(obj) Определить логику операции целочисленного преобразования объекта
__float__(self) float(obj) Определить логику операции преобразования числа с плавающей запятой объекта
__complex__(self) complex(obj) Определить логику работы комплексного преобразования объекта
__round__(self) round(obj) Определяет арифметическую логику округления объектов.
__bytes__(self) bytes(obj) Определить логику операции преобразования строки байтов объекта
__bool__(self) bool(obj) Определить логику работы объекта Логическая операция
.__format__(self, format_spec) obj.format() format(obj) Определить логику работы форматированного вывода объекта

Полиморфизм классов Python

полиморфизм_(Полиморфизм)_ — это полиморфизм методов, отражающий гибкость методов; короче говоря, он состоит из двух частей

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

    Функции/методы Python не имеют ограничений на объявление типов и естественным образом поддерживают полиморфизм типов параметров.

    Философия программирования Python: ограничения документа, а не ограничения синтаксиса

    Различие и функции различных типов параметров должны быть выполнены программистом.

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

    Функции/методы Python могут поддерживать переменные параметры и полиморфизм в виде параметров.

    Методы класса Python также являются функциями, и допустимы различные определения функций.

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

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

import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
    @abc.abstractmethod
    def talk(self):
        pass

class Cat(Animal): #动物的形态之一:猫
    def talk(self):
        print('say miaomiao')

class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print('say wangwang')

class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print('say aoao')