Перевантаження операторів у Python

Середній рівень об'єктно-орієнтованого програмування в Python

Jake Roach

Data Engineer

Перевантаження операторів порівняння

class Person:
  def __init__(self, name):
      self.name = name

  def __eq__(self, other):
      return self.name == other.name

Налаштуйте роботу ==

  • Використайте магічний метод __eq__()
  • Приймає self і other
  • Повертає булеве значення
bryce = Person("Bryce")
orion = Person("Orion")
print(bryce == orion)
False
chuck = Person("Charles Carmichael")
charles = Person("Charles Carmichael")
print(chuck == charles)
True
Середній рівень об'єктно-орієнтованого програмування в Python

Додавання двох об'єктів

class Team:
  def __init__(self, team_members):
      self.team_members = team_members

# Створіть два об'єкти Team, спробуйте додати їх
rookies = Team(["Casey", "Emmitt"])
veterans = Team(["Mike", "Chuck"])
dream_team = rookies + veterans
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
TypeError: unsupported operand type(s) for +: 'Team' and 'Team'
Середній рівень об'єктно-орієнтованого програмування в Python

Перевантаження оператора +

class Team:
  def __init__(self, team_members):
    # team_members — це список імен
    self.team_members = team_members

  def __add__(self, other):
    # Додавання об'єктів Team створює більшу Team
    return Team(self.team_members + other.team_members)
  • Використайте магічний метод __add__() для перевантаження +
  • self і other передаються до __add__()
  • Створіть новий об'єкт Team, об'єднавши team_members доданих об'єктів
Середній рівень об'єктно-орієнтованого програмування в Python

Додавання двох об'єктів

# Створіть два об'єкти Team
rookies = Team(["Casey", "Emmitt"])
veterans = Team(["Mike", "Chuck"])

# Спробуйте додати ці дві команди
dream_team = rookies + veterans
print(type(dream_team))
print(dream_team.team_members)
Team
["Casey", "Emmitt", "Mike", "Chuck"]
Середній рівень об'єктно-орієнтованого програмування в Python

Використання + для створення нового типу об'єкта

class Team:
  def __init__(self, team_members):
      self.team_members = team_members

class Employee:
  def __init__(self, name, title):
    self.name = name
    self.title = title

  def __add__(self, other):
    # Використайте оператор +, щоб створити
    # Team з імен кожного Employee
    return Team([self.name, other.name])

А якщо нам потрібно створити Team, поєднавши об'єкти Employee?

  • __add__ реалізовано в класі Employee
  • Створює новий об'єкт Team, формуючи список імен Employee
  • Результат додавання двох Employee — один Team
Середній рівень об'єктно-орієнтованого програмування в Python

Додайте два об'єкти, щоб створити новий

# Створіть два об'єкти Employee
anna = Employee("Anna", "Technical Specialist")
jeff = Employee("Jeffrey", "Musician")

# Тепер додайте їх, щоб створити команду
audio_team = anna + jeff
print(type(audio_team))
print(audio_team.team_members)
Team
["Anna", "Jeffrey"]
Середній рівень об'єктно-орієнтованого програмування в Python

Перевантаження інших операторів

Оператор Магічний метод Тип оператора
- __sub__ Арифметичний
!= __ne__ Порівняння
< __lt__ Порівняння
> __gt__ Порівняння
+= __iadd__ Присвоєння
and __and__ Логічний
in __contains__ Належність
is __is__ Ідентичність

 

 

 

 

 

 

 

... І ще багато інших!

Середній рівень об'єктно-орієнтованого програмування в Python

Давайте потренуємось!

Середній рівень об'єктно-орієнтованого програмування в Python

Preparing Video For Download...