common.md 5.0 KB

Разное

  • Python - строго типизированный язык.
  • Оператор "is" проверяет значение и тип.
  • Декоратор - это функция, которая принимает одну функцию в качестве аргумента и возвращает другую.

    Объекты

  • Имя - это ссылка на объект, но не сам объект.
  • В случае, когда оба имени указывают на изменяемый объект, его можно изменить с помощью любого имени. Объект содержит:
  • тип
  • id
  • значение
  • счетчик ссылок

    Типы данных

    Неизменяемые типы данных:
  • int
  • bool
  • float
  • string
  • complex
  • tuple
  • bytes
  • frozenset Изменяемые типы данных:
  • list
  • dict
  • set
  • bytearray

Классы

  • Результат вызова класса - экземпляр класса.
  • Методы работы с атрибутами - getattr, setattr, hasattr

    __mro__ # возвращает картеж родетельских классов
    

Миксины
Mixin — это класс, предоставляющий реализации методов для повторного использования дочерними классами. Он представляет ограниченную форму множественного наследования и родительский класс, который просто даёт функциональные возможности подклассам, не содержит состояния и не предназначен для создания экземпляров.

Когда использовать миксины? Они подходят, когда хочется:

  • предоставить множество дополнительных функций для класса
  • использовать определённую функцию во множестве разных классов

    @property

    class C:
    def __init__(self):
        self._x = None
    
    @property
    def x(self): # В декораторах 'setter' и 'deleter' нужно указывать имя метода-свойства
        """I'm the 'x' property."""
        return self._x
    
    @x.setter
    def x(self, value):
        self._x = value
    
    @x.deleter
    def x(self):
        del self._x
    

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

class A():
    count = 0
    
    def __init__(self):
        A.count += 1

	def exclaim(self):
        print('I`m an A!')

    @classmethod
    def kids(cls):
        print("A has", cls.count, "little objects.")

def test_classmethod():
    easy_a = A()
    breezy_a = A()
    wheezy_a = A()
    A.kids()

@staticmethod
@staticmethod – используется для создания метода, который ничего не знает о классе или экземпляре, через который он был вызван. Он просто получает переданные аргументы, без неявного первого аргумента, и его определение неизменяемо через наследование.

class CoyoteWeapon():
    @staticmethod
    def commercial():
        print('This CoyoWeapon has been brought to you by Acme')

CoyoteWeapon.commercial()

Полезные фичи

  • Фуyкция divmod возвращает частное и остаток

    >>> divmod(9, 5)
    (1, 4)
    

    Строки

    Модуль string содержит строковые константы:

    import string 
    
    >>> string.whitespace
    ' \t\n\r\x0b\x0c'
    >>> string.punctuation
    '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
    

Бинарные данные

  • bytes - картеж байтов (неизменяемый тип)
  • bytearray - список байтов (изменяемый тип)