class EuropeanSocket:
def voltage(self):
return 230
class USASocket:
def voltage(self):
return 120
class Adapter:
def __init__(self, socket):
self.socket = socket
def voltage(self):
return self.socket.voltage()
european_socket = EuropeanSocket()
adapter = Adapter(european_socket)
print(adapter.voltage()) # Использование адаптера для получения напряжения
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3🤔1
pass
используется как заглушка, когда синтаксис требует наличие кода, но логика ещё не реализована. Он позволяет избежать синтаксических ошибок в пустых конструкциях, таких как функции, циклы или классы.
def unfinished_function():
pass # Заглушка для будущей реализации
class EmptyClass:
pass # Заглушка для пустого класса
for _ in range(5):
pass # Заглушка в цикле
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤1
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Действие до вызова функции")
result = func(*args, **kwargs)
print("Действие после вызова функции")
return result
return wrapper
Здесь
my_decorator
— это декоратор, который добавляет действия до и после вызова функции. wrapper
— обёртка, которая выполняет эти действия и вызывает исходную функцию.
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
При вызове
say_hello("World")
будет выведено:
Действие до вызова функции
Hello, World!
Действие после вызова функции
Декораторы полезны для логирования, проверки прав доступа, кэширования и других задач.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10💯1
range()
задаётся третьим аргументом. По умолчанию шаг равен 1, но его можно изменить на любое целое число, включая отрицательные значения для обратного порядка.
for i in range(0, 10, 2):
print(i)
В этом примере вывод будет:
0
2
4
6
8
Здесь
range(0, 10, 2)
создаёт последовательность от 0 до 10 с шагом 2. Если шаг отрицательный, последовательность будет идти в обратном порядке:
for i in range(10, 0, -2):
print(i)
Вывод:
10
8
6
4
2
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥5
for i in range(3):
for j in range(2):
print(i, j)
Внешний цикл выполняется три раза, а внутренний — два раза для каждой итерации внешнего. Результат:
0 0
0 1
1 0
1 1
2 0
2 1
Вложенные циклы часто используются для работы с многомерными структурами данных, например, матрицами или вложенными списками. Они позволяют обрабатывать элементы на разных уровнях вложенности.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
__eq__()
определяет поведение оператора сравнения ==
для объектов класса. Он принимает два аргумента: self
(текущий объект) и other
(объект для сравнения), и возвращает True
или False
.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
return self.x == other.x and self.y == other.y
Здесь метод
__eq__()
сравнивает координаты двух точек. Если они равны, возвращается True
, иначе — False
.Метод
__eq__()
позволяет кастомизировать логику сравнения объектов, что полезно для работы с пользовательскими типами данных.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤1
and
, or
, not
используются для работы с булевыми значениями. -
and
возвращает True
, если оба операнда истинны. Если первый операнд ложный, возвращается его значение без вычисления второго. -
or
возвращает True
, если хотя бы один операнд истинный. Если первый операнд истинный, возвращается его значение без вычисления второго. -
not
инвертирует значение: True
становится False
, и наоборот.
a = True
b = False
print(a and b) # False, так как b ложно
print(a or b) # True, так как a истинно
print(not a) # False, инвертирует True
Эти операторы часто используются в условиях и для проверки нескольких выражений одновременно.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2
dir()
возвращает список атрибутов и методов объекта. Если аргумент не передан, она возвращает имена в текущей локальной области видимости.
import math
print(dir(math)) # Список всех атрибутов и методов модуля math
print(dir()) # Список имен в текущей локальной области видимости
dir()
полезен для интроспекции, чтобы узнать, какие методы и атрибуты доступны для объекта или модуля. Это часто используется при изучении новых библиотек или для отладки.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
def add_method(cls):
def new_method(self):
return "New method added"
cls.new_method = new_method
return cls
@add_method
class MyClass:
pass
obj = MyClass()
print(obj.new_method()) # Вывод: New method added
В этом примере декоратор
add_method
добавляет новый метод new_method
в класс MyClass
. Декораторы для классов полезны для добавления функциональности без изменения исходного кода класса.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👀1
import sqlite3
# Подключение к базе данных
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# Пользовательский ввод
user_id = '1 OR 1=1'
# Безопасный запрос с использованием параметров
query = "SELECT * FROM users WHERE id = ?"
cursor.execute(query, (user_id,))
# Получение результата
result = cursor.fetchall()
В этом примере данные из переменной
user_id
передаются в запрос через параметр ?
. Даже если в user_id
будет вредоносный код, он не выполнится, так как интерпретируется как строка, а не часть SQL-запроса.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
return "Woof!"
# Animal нельзя создать, Dog — можно
dog = Dog()
print(dog.make_sound()) # Вывод: Woof!
Абстрактный класс создается с использованием модуля
abc
. Класс наследуется от ABC
, а методы помечаются декоратором @abstractmethod
. Дочерние классы обязаны реализовать абстрактные методы.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
__hash__()
используется для получения хэш-значения объекта. Хэш — это целое число, которое уникально идентифицирует объект во время его жизни (если объект неизменяемый). Хэширование позволяет объектам быть ключами в словарях или элементами множеств.Если объект изменяемый, он не должен быть хэшируемым, так как изменение его состояния приведет к изменению хэша, что нарушит работу структур данных, основанных на хэшах.
Пример реализации для пользовательского класса:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __hash__(self):
return hash((self.x, self.y))
Здесь хэш объекта
Point
вычисляется на основе кортежа из координат x
и y
. Это гарантирует, что объекты с одинаковыми координатами будут иметь одинаковый хэш. Если объект изменяемый, переопределять __hash__
не рекомендуется.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💯1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Пример:
def example():
x = 10 # x — локальная переменная
print(x)
example()
print(x) # Ошибка: x не определена в глобальной области
Локальные переменные имеют приоритет над глобальными, если имена совпадают. Для изменения глобальной переменной внутри функции используется ключевое слово
global
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3