44 Введение в классы

Класс, функционирующий как шаблон, который определяет основные характеристики конкретного объекта. Вот пример:

 class Person(object):
     """A simple class."""                            # docstring
     species = "Homo Sapiens"                         # class attribute

     def __init__(self, name):                        # special method
         """This is the initializer. It's a special
         method (see below).
         """
         self.name = name                             # instance attribute

     def __str__(self):                               # special method
         """This method is run when Python tries 
         to cast the object to a string. Return 
         this string when using print(), etc.
         """
         return self.name

     def rename(self, renamed):                       # regular method
         """Reassign and print the name attribute."""
         self.name = renamed
         print("Now my name is {}".format(self.name))

 

Есть несколько вещей, на которые стоит обратить внимание при рассмотрении приведенного выше примера.

  1. Класс состоит из атрибутов (данных) и методов (функций).
  2. Атрибуты и методы просто определяются как обычные переменные и функции.
  3. Как было отмечено в соответствующей строке документации, то __init__() метод вызывается инициализатором. Он эквивалентен конструктору в других объектно-ориентированных языках и является методом, который запускается в первый раз при создании нового объекта или нового экземпляра класса.
  4. Атрибуты , которые применимы ко всему классу определяются первым, и называются атрибутами класса.
  5. Атрибуты, относящиеся к определенному экземпляру класса (объект) называются атрибутами экземпляра. Они , как правило , определяется внутри __init__() ; это не является необходимым, но рекомендуется (так как атрибуты определяются вне __init__() рискуют быть доступны , прежде чем они определены).
  6. Каждый метод, включенный в определение класса, передает рассматриваемый объект в качестве первого параметра. Слово self используется для этого параметра (использование self на самом деле условно, так как слово self не имеет собственного значения в Python, но это один из самых уважаемых конвенций Python, и вы всегда должны следовать).
  7. Те, кто привык к объектно-ориентированному программированию на других языках, могут быть удивлены несколькими вещами. Одним из них является , что Python не имеет реального понятия private элементов, так что все, по умолчанию, имитирует поведение C ++ / Java public ключевого слова. Для получения дополнительной информации см. Пример «Члены частного класса» на этой странице.
  8. Некоторые методы класса имеет следующий вид: __functionname__(self, other_stuff) . Все такие методы называются «магическими методами» и являются важной частью классов в Python. Например, перегрузка операторов в Python реализована магическими методами. Для получения дополнительной информации см соответствующей документации .

Теперь давайте сделаем несколько экземпляров нашего Person класса!

 >>> # Instances
>>> kelly = Person("Kelly")
>>> joseph = Person("Joseph")
>>> john_doe = Person("John Doe")

 

В настоящее время мы имеем три Person объектов, kelly , joseph и john_doe .

Мы можем получить доступ к атрибутам класса из каждого экземпляра с помощью оператора точки . Еще раз обратите внимание на разницу между атрибутами класса и экземпляра:

 >>> # Attributes
>>> kelly.species
'Homo Sapiens'
>>> john_doe.species
'Homo Sapiens'
>>> joseph.species
'Homo Sapiens'
>>> kelly.name
'Kelly'
>>> joseph.name
'Joseph'


 

Мы можем выполнить методы класса с использованием того же оператора точки . :

 >>> # Methods
>>> john_doe.__str__()
'John Doe'
>>>  print(john_doe)
'John Doe'
>>>  john_doe.rename("John")
'Now my name is John'