Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Ko'proq ko'rsatish📈 Telegram kanali Python | Вопросы собесов analitikasi
Python | Вопросы собесов (@python_easy_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 631 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 920-o'rinni va Rossiya mintaqasida 51 114-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 631 obunachiga ega bo‘ldi.
15 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -109 ga, so‘nggi 24 soatda esa 0 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 6.20% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.23% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 783 marta ko‘riladi; birinchi sutkada odatda 535 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 3 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent ставь, модуль, строка, docker, alice kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 16 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
__init__(). Он используется для инициализации объекта, то есть задания начальных значений атрибутов объекта.
🚩Создание класса с конструктором
Необходимо определить метод __init__() внутри класса.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def display_info(self):
print(f"Name: {self.name}, Age: {self.age}")
🚩Создание объекта класса
Включает вызов конструктора. Для этого используется имя класса, за которым следуют круглые скобки с аргументами, передаваемыми в конструктор.
person1 = Person("Alice", 30)
person1.display_info()
🚩Пример с доп. методами
Кроме конструктора, классы могут иметь и другие методы для выполнения различных операций.
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * (self.width + self.height)
# Создание объекта
rect1 = Rectangle(10, 5)
print(f"Area: {rect1.area()}") # Вывод: Area: 50
print(f"Perimeter: {rect1.perimeter()}") # Вывод: Perimeter: 30
Класс Rectangle имеет конструктор, который инициализирует атрибуты width и height. Методы area() и perimeter() вычисляют и возвращают площадь и периметр прямоугольника соответственно.
Ставь 👍 и забирай 📚 Базу знанийlen() и abs() соответственно. Эти методы помогают сделать пользовательские объекты более интуитивно понятными и удобными для использования.
🚩Метод __len__
Используется для определения длины объекта. Он должен возвращать количество элементов в объекте или какую-то другую числовую характеристику длины объекта. Например, для списков, кортежей и строк метод __len__ возвращает количество элементов или символов.
class MyCollection:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
collection = MyCollection([1, 2, 3, 4, 5])
print(len(collection)) # Вывод: 5
🚩Метод __abs__
Метод __abs__ используется для определения абсолютного значения объекта. Он должен возвращать абсолютное значение объекта, как это делает встроенная функция abs() для чисел.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __abs__(self):
return (self.x**2 + self.y**2) ** 0.5
vector = Vector(3, 4)
print(abs(vector)) # Вывод: 5.0
Ставь 👍 и забирай 📚 Базу знанийYoutube полностью заблокируют зимой. Google сворачивает ВСЕ свои сервисы. А Windows и Apple ждут удобного момента.Изоляция ждёт всех, кто не заботится о своей свободе и кибербезопасности. Чтобы такого не было с вами — читайте канал IT ВЕДОМСТВО. Это главный техноканал Телеграма, где постят инсайдейрскую информацию, лайфхаки, гайды по обходу блокировок без VPN, фишки для айтишников - все самое полезное там. Подписывайтесь, чтобы не потерять: https://t.me/+wVax9n-CeFRmNzgy
__init__ используется для инициализации новых объектов. Он позволяет задавать начальные значения атрибутов объекта.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 30)
🟠Представление объектов в виде строки
Метод __str__ определяет, как объект будет представлен в виде строки. Это удобно для пользовательского вывода.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}, {self.age} years old"
person = Person("Alice", 30)
print(person) # Alice, 30 years old
🟠Перегрузка операторов
Dunder методы позволяют перегружать стандартные операторы. Например, __add__ позволяет определить поведение оператора + для объектов класса.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __str__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(2, 3)
v2 = Vector(5, 7)
v3 = v1 + v2
print(v3) # Vector(7, 10)
🟠Доступ к элементам по индексу
Метод __getitem__ позволяет определить, как объект класса будет вести себя при доступе к его элементам по индексу.
class CustomList:
def __init__(self, elements):
self.elements = elements
def __getitem__(self, index):
return self.elements[index]
clist = CustomList([1, 2, 3, 4, 5])
print(clist[2]) # 3
🟠Контекстные менеджеры
Метод __enter__ и __exit__ позволяют создавать объекты, которые могут использоваться в контекстах with.
class ManagedFile:
def __init__(self, filename):
self.filename = filename
def __enter__(self):
self.file = open(self.filename, 'r')
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
with ManagedFile('example.txt') as f:
content = f.read()
print(content)
Ставь 👍 и забирай 📚 Базу знаний_ для "protected" и двойное подчеркивание __ для "private") для индикации уровня доступа.
🟠Контроль доступа
Инкапсуляция позволяет контролировать доступ к данным и методам объекта. Это предотвращает некорректное использование или изменение состояния объекта, что может привести к ошибкам.
🟠Интерфейсы
Инкапсуляция способствует созданию четких интерфейсов для взаимодействия с объектами. Внешний код взаимодействует с объектом через его публичные методы, не зная о внутреннем устройстве.
🟠Модульность
Инкапсуляция помогает разделять функциональность на независимые модули. Это облегчает разработку, тестирование и сопровождение кода.
В этом примере переменная __balance скрыта от внешнего доступа. Методы deposit, withdraw и get_balance обеспечивают контролируемый доступ к этой переменной, обеспечивая инкапсуляцию.
class BankAccount:
def __init__(self, initial_balance):
self.__balance = initial_balance # Закрытая переменная
def deposit(self, amount):
if amount > 0:
self.__balance += amount
else:
raise ValueError("Amount must be positive")
def withdraw(self, amount):
if 0 < amount <= self.__balance:
self.__balance -= amount
else:
raise ValueError("Invalid withdrawal amount")
def get_balance(self):
return self.__balance
# Создание объекта и взаимодействие с ним
account = BankAccount(100)
account.deposit(50)
print(account.get_balance()) # 150
account.withdraw(30)
print(account.get_balance()) # 120
Ставь 👍 и забирай 📚 Базу знанийimport asyncio
async def fetch_data():
await asyncio.sleep(1)
return "Data fetched"
async def main():
data = await fetch_data()
print(data)
asyncio.run(main())
🟠Рекурсия
Рекурсивные алгоритмы, такие как обход дерева или вычисление факториала, невозможно представить в виде линейного кода без потери логики и структуры.
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
🟠Обработка исключений
В некоторых случаях требуется обработка ошибок и исключений, что нарушает линейную структуру кода.
try:
result = 10 / 0
except ZeroDivisionError:
print("Деление на ноль!")
🟠Сложные циклы и условия
Когда код содержит сложные вложенные циклы и условия, его линейное представление становится громоздким и трудночитаемым.
for i in range(10):
for j in range(10):
if i == j:
print(f"{i} равно {j}")
🟠Паттерны проектирования
Некоторые паттерны проектирования, такие как фабричный метод или стратегия, предполагают использование классов и объектов, что не всегда удобно линеаризовать.
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof"
class Cat(Animal):
def speak(self):
return "Meow"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.speak())
🟠Параллелизм
Параллельные вычисления, где задачи выполняются одновременно в разных потоках или процессах, не могут быть линеаризованы.
import threading
def print_numbers():
for i in range(5):
print(i)
thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()
Ставь 👍 и забирай 📚 Базу знанийAnimal может повлиять на работу производных классов Dog и Cat, особенно если они зависят от определенной реализации метода sound.
class Animal:
def sound(self):
return "Some sound"
class Dog(Animal):
def sound(self):
return "Bark"
class Cat(Animal):
def sound(self):
return "Meow"
# Изменение базового класса
class Animal:
def sound(self):
return "Default sound"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.sound())
🚩Альтернативы и решения
🟠Композиция вместо наследования
В многих случаях композиция предпочтительнее наследования. Вместо того чтобы наследовать классы, можно использовать композицию, чтобы включить объекты других классов в качестве полей.
🟠Интерфейсы и абстрактные классы
Использование интерфейсов и абстрактных классов позволяет определить контракты для классов, не предоставляя реализации. Это помогает уменьшить связанность и улучшить гибкость.
🟠Шаблон проектирования "Стратегия"
Этот паттерн позволяет изменять алгоритмы поведения объекта во время выполнения, что может быть более гибким решением, чем наследование.
Ставь 👍 и забирай 📚 Базу знанийservice.proto для определения сервиса и его методов:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
2⃣Генерация кода
Сгенерируйте код клиента и сервера на языке Python:
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. service.proto
3⃣Реализация сервера
Создайте сервер, используя сгенерированный код:
from concurrent import futures
import grpc
import service_pb2
import service_pb2_grpc
class Greeter(service_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
return service_pb2.HelloReply(message=f"Hello, {request.name}!")
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
service_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
if __name__ == '__main__':
serve()
4⃣Реализация клиента
Создайте клиент для вызова удаленного метода:
import grpc
import service_pb2
import service_pb2_grpc
def run():
with grpc.insecure_channel('localhost:50051') as channel:
stub = service_pb2_grpc.GreeterStub(channel)
response = stub.SayHello(service_pb2.HelloRequest(name='World'))
print("Greeter client received: " + response.message)
if __name__ == '__main__':
run()
🚩Плюсы
➕Эффективность
Высокая производительность благодаря HTTP/2 и Protocol Buffers.
➕Многоязычность
Поддержка множества языков программирования.
➕Простота определения
Простое определение сервисов с помощью Protocol Buffers.
➕Расширенные возможности
Поддержка стриминга, аутентификации, балансировки нагрузки и других функций.
➕Платформенная независимость
Возможность взаимодействия между различными системами.
🚩Минусы
➖Крутая кривая обучения
Необходимость изучения Protocol Buffers и особенностей gRPC.
➖Ограниченная поддержка браузеров
gRPC не поддерживается напрямую в браузерах, хотя есть gRPC-Web для этих целей.
➖Сложности с отладкой
Отладка распределенных систем с использованием gRPC может быть сложной.
Ставь 👍 и забирай 📚 Базу знаний