В Python
cls
— это конвенциональное имя, используемое в методах классов для обозначения самого класса. Оно аналогично self
, который используется для обозначения экземпляра класса в методах экземпляра.Методы класса (class methods) — это методы, которые получают сам класс в качестве первого аргумента вместо экземпляра класса. Такие методы определяются с использованием декоратора
@classmethod
.class MyClass:
class_attribute = "Классовый атрибут"
def __init__(self, value):
self.instance_attribute = value # Атрибут экземпляра
@classmethod
def class_method(cls):
return cls.class_attribute
# Вызов метода класса
print(MyClass.class_method()) # Вывод: "Классовый атрибут"
cls
, вы можете получить доступ к атрибутам и методам самого класса.cls
позволяет создавать методы, которые могут работать с классом, а не с конкретным экземпляром, что полезно для задач, связанных с настройкой или инициализацией классовых атрибутов.cls
можно создавать альтернативные конструкторы, которые возвращают экземпляры класса различными способами.```python
class MyClass:
def init(self, value):
self.value = value
@classmethod
def from_string(cls, string):
value = int(string)
return cls(value)
obj = MyClass.from_string("42")
print(obj.value) # Вывод: 42
```
class MyClass:
class_attribute = "Классовый атрибут"
def __init__(self, value):
self.instance_attribute = value
@classmethod
def class_method(cls):
return cls.class_attribute
def instance_method(self):
return self.instance_attribute
# Создание экземпляра
obj = MyClass(42)
# Вызов метода экземпляра
print(obj.instance_method()) # Вывод: 42
# Вызов метода класса
print(MyClass.class_method()) # Вывод: "Классовый атрибут"
cls
— это имя, используемое для обозначения самого класса в методах класса, определенных с помощью декоратора @classmethod
. Оно позволяет работать с атрибутами и методами класса, а не конкретного экземпляра.cls
используется в методах класса для обозначения самого класса, как self
используется для обозначения экземпляра класса.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
👾 1096 собесов на Python Developer
🔒 База реальных собесов
🔒 База тестовых заданий
👾 Список менторов
🖥 Python
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 Java
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
🖥 Frontend
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 С/С++
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 Kotlin
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 С#
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 Swift
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 PHP
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
🖥 Тестировщик
├ Вопросы собесов
├ Вакансии
└ Тесты
🖥 Data Science
├ Вопросы собесов
├ Вакансии
└ Тесты
👩💻 DevOps
├ Вопросы собесов
├ Вакансии
└ Тесты
👣 Golang
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
⚙ Backend
└ Вопросы собесов
👾 Список менторов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
└ Тесты
├ Вопросы собесов
├ Вакансии
└ Тесты
├ Вопросы собесов
├ Вакансии
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
└ Вопросы собесов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
Python | Вопросы собесов pinned «👾 1096 собесов на Python Developer 🔒 База реальных собесов 🔒 База тестовых заданий 👾 Список менторов 🖥 Python ├ Вакансии ├ LeetCode ответы └ Тесты 👩💻 Java ├ Вопросы собесов ├ Вакансии ├ LeetCode ответы └ Тесты 🖥 Frontend ├ Вопросы собесов ├ Вакансии ├…»
Anonymous Quiz
10%
Модуль concurrent.futures используется для работы только с процессами
9%
Модуль concurrent.futures не поддерживает асинхронные операции
67%
Модуль concurrent.futures предоставляет высокоуровневый интерфейс для работы с потоками и процессами
14%
Модуль concurrent.futures доступен только в Python 3.8 и выше
👍4
В Python классы и их экземпляры хранят атрибуты и методы в определённых структурах данных. Понимание этих структур помогает лучше понять, как работают классы и объекты, а также как Python реализует инкапсуляцию и наследование.
Экземпляры классов хранят свои атрибуты в специальном словаре
__dict__
. Этот словарь содержит пары ключ-значение, где ключ — это имя атрибута, а значение — его значение.class MyClass:
def __init__(self, value):
self.value = value
obj = MyClass(42)
print(obj.__dict__) # Вывод: {'value': 42}
Классы в Python также используют словарь
__dict__
, чтобы хранить свои атрибуты и методы. Этот словарь доступен через атрибут __dict__
класса и содержит все атрибуты и методы класса.class MyClass:
class_attribute = "Классовый атрибут"
def __init__(self, value):
self.value = value
def method(self):
return "Метод экземпляра"
print(MyClass.__dict__)
# Выводит словарь, содержащий class_attribute, __init__, method и другие служебные атрибуты
Когда вы создаете экземпляр класса, Python сначала проверяет наличие атрибута или метода в экземпляре объекта, а затем в его классе, и далее по цепочке наследования, если атрибут или метод не найден.
class Parent:
def method(self):
return "Метод родителя"
class Child(Parent):
pass
child = Child()
print(child.method()) # Вывод: "Метод родителя"
Порядок разрешения методов (MRO) определяет, в каком порядке Python ищет атрибуты и методы. MRO можно получить с помощью метода
mro()
или атрибута __mro__
.class A:
pass
class B(A):
pass
class C(A):
pass
class D(B, C):
pass
print(D.mro())
# Вывод: [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
class Parent:
pass
class Child(Parent):
pass
print(Child.__bases__) # Вывод: (<class '__main__.Parent'>,)
print(Child.__mro__) # Вывод: (<class '__main__.Child'>, <class '__main__.Parent'>, <class 'object'>)
Атрибуты и методы экземпляров класса хранятся в словаре
__dict__
экземпляра, а атрибуты и методы самого класса — в словаре __dict__
класса. Наследование и порядок разрешения методов (MRO) определяют, как Python ищет атрибуты и методы в иерархии классов.Атрибуты экземпляров хранятся в
__dict__
объекта, а атрибуты и методы класса — в __dict__
класса. Порядок разрешения методов (MRO) определяет, как Python ищет атрибуты и методы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5
Anonymous Quiz
8%
Замыкания должны быть объявлены с использованием ключевого слова global
5%
Замыкания могут изменять неизменяемые объекты
81%
Замыкания позволяют сохранять состояние функции между вызовами
6%
Замыкания используются только для работы с глобальными переменными
👍1🔥1
Класс — это шаблон или чертеж для создания объектов. Он определяет набор свойств и методов, которые будут у объектов этого класса. Класс описывает, что должно быть у объектов, но сам по себе не является конкретным экземпляром.
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
return f"{self.name} barks"
В этом примере
Dog
— это класс, который определяет, что у каждой собаки будет имя и метод bark()
.Объект класса — это конкретный экземпляр класса, созданный на основе его шаблона. Он имеет реальные данные и может выполнять методы, определенные в классе.
my_dog = Dog("Rex")
print(my_dog.bark()) # Выведет: Rex barks
my_dog
— это объект класса Dog
. Он имеет конкретное имя "Rex" и может выполнять метод bark()
.- Класс: Определяет свойства и поведение (методы).
- Объект: Реализует эти свойства и методы с конкретными данными.
- Класс: Создается один раз и служит шаблоном.
- Объект: Можно создать множество объектов на основе одного класса.
- Класс: Статичен, определяет общую структуру.
- Объект: Динамичен, хранит конкретное состояние.
class Car: def __init__(s, m, y): s.m, s.y = m, y
def drive(s): return f"The {s.m} from {s.y} is driving"
c1, c2 = Car("Toyota", 2020), Car("Honda", 2019)
print(c1.drive()) # The Toyota from 2020 is driving
print(c2.drive()) # The Honda from 2019 is driving
- Car — это класс.
- car1 и car2 — это объекты класса
Car
, каждый из которых имеет свои данные (модель и год выпуска).Класс — это шаблон для создания объектов, определяющий свойства и методы. Объект — это конкретный экземпляр класса с реальными данными и функциональностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
Ставь 👍 если знал ответ и 🔥 если нет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47🔥21❤3🤔1👀1
Абстракция — это один из ключевых принципов объектно-ориентированного программирования (ООП), который позволяет упростить сложные системы, скрывая детали их реализации и предоставляя только необходимую функциональность. В Python абстракция достигается через использование классов и интерфейсов, что позволяет разработчикам создавать более понятные и управляемые структуры кода.
Абстракция позволяет сосредоточиться на том, что делает объект, а не на том, как он это делает. Это достигается путем:
В Python абстракция часто реализуется с использованием абстрактных классов и методов. Абстрактные классы определяются с помощью модуля
abc
(Abstract Base Classes), а абстрактные методы обозначаются декоратором @abstractmethod
.from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
@abstractmethod
def move(self):
pass
Абстрактный класс
Animal
определяет два абстрактных метода: make_sound
и move
. Эти методы не имеют реализации и должны быть реализованы в подклассах. Попробуем создать подклассы:class Dog(Animal):
def make_sound(self):
return "Bark"
def move(self):
return "Run"
class Cat(Animal):
def make_sound(self):
return "Meow"
def move(self):
return "Jump"
Теперь мы можем создать объекты классов
Dog
и Cat
и использовать их методы, не задумываясь о деталях реализации.dog = Dog()
print(dog.make_sound()) # Вывод: "Bark"
print(dog.move()) # Вывод: "Run"
cat = Cat()
print(cat.make_sound()) # Вывод: "Meow"
print(cat.move()) # Вывод: "Jump"
Абстракция в ООП позволяет скрывать детали реализации и предоставлять простой интерфейс для взаимодействия с объектами. В Python абстракция достигается через абстрактные классы и методы, которые определяются с использованием модуля
abc
и декоратора @abstractmethod
.Абстракция скрывает детали реализации и предоставляет простой интерфейс для использования объектов. В Python это реализуется с помощью абстрактных классов и методов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Anonymous Quiz
11%
@property запрещает изменение значения атрибута
14%
@property позволяет скрыть метод класса от доступа
65%
@property позволяет определить метод, который будет вызываться при доступе к атрибуту
10%
@property используется только для методов, которые возвращают неизменяемые значения
👍6
В Python существуют два основных типа полиморфизма: перегрузка методов и наследование и переопределение методов. Давайте рассмотрим каждый из них подробнее.
Перегрузка методов подразумевает использование одного и того же метода с различными типами данных. Однако в Python это реализуется несколько иначе, чем в статически типизированных языках, таких как C++ или Java. В Python отсутствует явная поддержка перегрузки методов. Вместо этого мы можем использовать стандартные функции с переменным числом аргументов.
Пример:
class Math:
def add(self, a, b, c=0):
return a + b + c
math = Math()
print(math.add(2, 3)) # 5
print(math.add(2, 3, 4)) # 9
В этом примере метод
add
может принимать два или три аргумента, что является примером неявной перегрузки.Наследование и переопределение методов – это более распространенный и важный аспект полиморфизма в Python. Это когда методы в дочернем классе переопределяют поведение методов в базовом классе.
Пример:
class Animal:
def sound(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def sound(self):
return "Woof"
class Cat(Animal):
def sound(self):
return "Meow"
def make_sound(animal):
print(animal.sound())
dog = Dog()
cat = Cat()
make_sound(dog) # Woof
make_sound(cat) # Meow
В этом примере класс
Dog
и класс Cat
переопределяют метод sound
базового класса Animal
. Функция make_sound
вызывает метод sound
независимо от конкретного типа объекта.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤4🐳1💊1
Anonymous Quiz
24%
sorted() сортирует список на месте
71%
sorted() возвращает новый отсортированный список
3%
sorted() не поддерживает пользовательские функции сравнения
2%
sorted() работает только с числовыми значениями
👍2
В Python можно создать итератор из коллекции, используя встроенную функцию
iter()
. Итераторы – это объекты, которые реализуют метод __iter__()
и метод __next__()
. Давайте рассмотрим, как это работает на примере.Рассмотрим список, который является одной из стандартных коллекций в Python:
my_list = [1, 2, 3, 4, 5]
Чтобы создать итератор из этого списка, используем функцию
iter()
:my_iterator = iter(my_list)
Теперь
my_iterator
– это итератор, который можно использовать для поочередного доступа к элементам списка.Мы можем использовать функцию
next()
для получения следующего элемента итератора:print(next(my_iterator)) # Выводит: 1
print(next(my_iterator)) # Выводит: 2
print(next(my_iterator)) # Выводит: 3
Когда элементы коллекции заканчиваются,
next()
вызовет исключение StopIteration
.Обычно итераторы используются в сочетании с циклами
for
, что упрощает работу с ними:for item in my_iterator:
print(item)
Если попытаться использовать итератор повторно после его исчерпания, он больше не будет выдавать элементы:
my_iterator = iter(my_list)
for item in my_iterator:
print(item)
# Повторное использование того же итератора:
for item in my_iterator:
print(item) # Ничего не выведет, так как итератор уже исчерпан
Можно создать собственный итератор, определив класс с методами
__iter__()
и __next__()
.Пример:
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
result = self.data[self.index]
self.index += 1
return result
else:
raise StopIteration
my_iterable = MyIterator([10, 20, 30])
for item in my_iterable:
print(item)
В этом примере мы создали собственный итератор, который перебирает элементы списка
[10, 20, 30]
.iter()
.__iter__()
и __next__()
для поочередного доступа к элементам.for
для удобства перебора элементов коллекции.Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
Anonymous Quiz
8%
Выражения-генераторы могут быть использованы только в функциях
14%
Выражения-генераторы возвращают список
11%
Выражения-генераторы не поддерживают фильтрацию данных
67%
Выражения-генераторы создают итератор
Для того чтобы создать класс, который поддерживает протокол итератора в Python, нужно определить два метода:
__iter__()
и __next__()
. Давайте рассмотрим пошагово, как это сделать.Начнем с создания класса, который будет содержать коллекцию данных. В данном примере это будет список.
class MyIterable:
def __init__(self, data):
self.data = data
self.index = 0
Метод
__iter__()
должен возвращать сам итератор. В данном случае наш класс сам будет являться итератором, поэтому метод __iter__()
будет возвращать self
.class MyIterable:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
Метод
__next__()
должен возвращать следующий элемент последовательности. Если элементы закончились, метод должен вызывать исключение StopIteration
.class MyIterable:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
result = self.data[self.index]
self.index += 1
return result
else:
raise StopIteration
class MyIterable:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
result = self.data[self.index]
self.index += 1
return result
else:
raise StopIteration
# Создаем объект нашего класса
my_iterable = MyIterable([10, 20, 30, 40, 50])
# Используем его в цикле for
for item in my_iterable:
print(item)
self.data
хранит данные, а self.index
отслеживает текущую позицию в последовательности.__iter__()
возвращает сам объект, так как наш класс будет сам итератором.__next__()
возвращает следующий элемент в последовательности и увеличивает индекс. Если элементов больше нет, вызывается исключение StopIteration
.__iter__()
и __next__()
в вашем классе.__iter__()
должен возвращать объект итератора (обычно self
).__next__()
должен возвращать следующий элемент или вызывать StopIteration
, если элементов больше нет.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Anonymous Quiz
4%
isinstance() не поддерживает проверку наследования
5%
isinstance() всегда возвращает True для встроенных типов данных
30%
isinstance() проверяет, имеет ли объект указанный тип данных
61%
isinstance() проверяет, является ли объект экземпляром указанного класса или его подклассов
Статические методы (static methods) в Python используются для создания методов, которые связаны с классом, но не требуют доступа к экземпляру этого класса или к самим данным класса. Это методы, которые выполняют функции, связанные с классом, но не изменяют и не используют состояние экземпляра (атрибуты объекта) или состояние самого класса (атрибуты класса). Они могут быть вызваны на уровне класса, а не на уровне экземпляра класса.
Для создания статического метода в Python используется декоратор
@staticmethod
. Давайте рассмотрим пример:class MyClass:
@staticmethod
def static_method(arg1, arg2):
return arg1 + arg2
Вы можете вызывать статический метод как через сам класс, так и через его экземпляр:
result = MyClass.static_method(5, 10)
print(result) # Вывод: 15
my_instance = MyClass()
result = my_instance.static_method(3, 7)
print(result) # Вывод: 10
self
, что позволяет им изменять состояние конкретного экземпляра класса.class MyClass:
def instance_method(self, value):
self.value = value
cls
, что позволяет им изменять состояние самого класса.class MyClass:
class_variable = 0
@classmethod
def class_method(cls, value):
cls.class_variable = value
self
или cls
в качестве первого аргумента и не могут изменять состояние экземпляра или класса.class MyClass:
@staticmethod
def static_method(arg1, arg2):
return arg1 + arg2
@staticmethod
.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Anonymous Quiz
2%
str() вызывается при сравнении объектов
1%
str() вызывается при удалении объекта
4%
str() вызывается при создании нового экземпляра класса
93%
str() вызывается при преобразовании объекта в строку с помощью str()
💊24❤2👀2
Методы класса (class methods) в Python используются для методов, которые работают с самим классом, а не с его экземплярами. Они позволяют изменять состояние класса или выполнять операции, которые относятся ко всему классу в целом, а не к отдельным его экземплярам.
Для создания метода класса в Python используется декоратор
@classmethod
. Такие методы принимают первым аргументом не self
(как в методах экземпляра), а cls
, что указывает на сам класс.Пример:
class MyClass:
class_variable = 0
@classmethod
def class_method(cls, value):
cls.class_variable = value
Метод класса можно вызывать как на уровне класса, так и через экземпляры класса:
# Вызов метода класса через сам класс
MyClass.class_method(10)
print(MyClass.class_variable) # Вывод: 10
# Вызов метода класса через экземпляр класса
instance = MyClass()
instance.class_method(20)
print(MyClass.class_variable) # Вывод: 20
Фабричный метод — это метод класса, который возвращает новый экземпляр класса. Рассмотрим пример, где метод класса используется для создания объекта с предустановленными значениями.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_birth_year(cls, name, birth_year):
age = 2024 - birth_year
return cls(name, age)
# Создание экземпляра через основной конструктор
person1 = Person("Alice", 30)
print(person1.name, person1.age) # Вывод: Alice 30
# Создание экземпляра через фабричный метод
person2 = Person.from_birth_year("Bob", 1990)
print(person2.name, person2.age) # Вывод: Bob 34
self
).class MyClass:
def instance_method(self, value):
self.value = value
@staticmethod
).class MyClass:
@staticmethod
def static_method(arg1, arg2):
return arg1 + arg2
@classmethod
).class MyClass:
class_variable = 0
@classmethod
def class_method(cls, value):
cls.class_variable = value
@classmethod
и принимают cls
в качестве первого аргумента.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Anonymous Quiz
3%
zip() работает только с числовыми последовательностями
54%
zip() объединяет несколько последовательностей в одну, возвращая итератор
3%
zip() изменяет исходные последовательности
41%
zip() объединяет несколько последовательностей в одну, возвращая список