Методы класса

Введение в объектно-ориентированное программирование на Python

George Boorman

Curriculum Manager, DataCamp

Методы

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

    def give_raise(self, amount):
        self.salary += amount


# Unique attribute values emp_one = Employee("John", 40000)
emp_one.give_raise(5000) print(emp_one.salary)
45000









# Unique attribute values emp_two = Employee("Jane", 60000)
emp_two.give_raise(5000) print(emp_two.salary)
65000
Введение в объектно-ориентированное программирование на Python

Методы класса

  • Можно определять методы класса
  • Область применения ограничена: данные экземпляра недоступны
class MyClass:
    # Use a decorator to declare a class method
    @classmethod

# cls argument refers to the class def my_awesome_method(cls, args...): # Do stuff here # Can't use any instance attributes
# Call the class, not the object MyClass.my_awesome_method(args...)
  • Как и self, cls — условное имя; подойдёт любое слово
Введение в объектно-ориентированное программирование на Python

Альтернативные конструкторы

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

@classmethod def from_file(cls, filename): with open(filename, "r") as f: # Read the first line name = f.readline().strip() # Read the second line as integer salary = int(f.readline().strip())
return cls(name, salary)
  • Позволяют использовать альтернативные конструкторы
  • __init__() может быть только один

 

  • Используйте методы класса для создания объектов
  • Используйте return для возврата объекта
  • cls(...) вызовет __init__(...)
Введение в объектно-ориентированное программирование на Python

Альтернативные конструкторы

class Employee:
  def __init__(self, name, salary):
      self.name = name
      self.salary = salary
  @classmethod
  def from_file(cls, filename):
      with open(filename, "r") as f:
          name = f.readline().strip()
          salary = int(f.readline().strip())
      return cls(name, salary)  

Employee.txt

Текстовый файл с именем John Smith и зарплатой 40000

# Create an employee without calling Employee()
emp = Employee.from_file("employee_data.txt")
print(emp.name)
John Smith
Введение в объектно-ориентированное программирование на Python

Когда применять методы класса

  • Альтернативные конструкторы

  • Методы, не требующие атрибутов экземпляра

  • Ограничение до единственного экземпляра (объекта) класса

    • Подключения к базе данных
    • Настройки конфигурации
Введение в объектно-ориентированное программирование на Python

Давайте потренируемся!

Введение в объектно-ориентированное программирование на Python

Preparing Video For Download...