Классы и объекты
Определите класс car с двумя атрибутами: color и speed. Затем создайте экземпляр и верните speed
Решение:
class Car:
def __init__(self, color, speed):
self.color = color
self.speed = speed
# Создаем экземпляр класса Car
my_car = Car('red', 120)
# Возвращаем атрибут speed
print(my_car.speed) # 120
В чем разница между методами экземпляра, класса и статическими методами в Python?
Методы в Python могут быть методами экземпляра, класса или статическими методами. Вот их различия:
-
Методы экземпляра:
-
Определяются с первым параметром
self. -
selfссылается на экземпляр класса. -
Могут изменять состояние экземпляра.
class MyClass: def instance_method(self): return 'instance method called', self -
-
Методы класса:
-
Определяются с первым параметром
cls. -
clsссылается на сам класс. -
Используют декоратор
@classmethod. -
Могут изменять состояние класса.
class MyClass: @classmethod def class_method(cls): return 'class method called', cls -
-
Статические методы:
-
Не принимают ни
self, ниcls. -
Используют декоратор
@staticmethod. -
Не получают класс или экземпляр автоматически. Если передать объект явно или обратиться к классу по имени, статический метод может менять доступное ему состояние.
class MyClass: @staticmethod def static_method(): return 'static method called' -
Что означает self в классе?
self является общепринятым именем первого параметра метода экземпляра, а не ключевым словом Python. При вызове через экземпляр в этот параметр автоматически передаётся сам экземпляр.
Когда вызывается метод экземпляра, Python автоматически передает self в качестве первого аргумента. Это позволяет методу получать доступ к данным, определенным в экземпляре класса, и взаимодействовать с ними.
Пример использования self в методе экземпляра:
class MyClass:
def __init__(self, x):
self.x = x
def display(self):
print(f"Value of x is: {self.x}")
# Создание экземпляра класса
obj = MyClass(42)
# Вызов метода экземпляра с использованием self
obj.display() # Вывод: Value of x is: 42
Таким образом, self обеспечивает контекст, в котором методы класса могут оперировать с данными, принадлежащими конкретному экземпляру этого класса.
Как реализуется наследование классов в Python?
В Python наследование классов реализуется путем создания нового класса на основе уже существующего (родительского) класса. Новый класс (потомок) получает доступ к атрибутам и методам родительского класса, что позволяет повторно использовать код и расширять функциональность.
Основные моменты наследования классов в Python:
-
Определение класса-потомка:
class ParentClass: # Код родительского класса class ChildClass(ParentClass): # Код потомка, который наследует от ParentClass -
Доступ к методам и атрибутам родительского класса: Потомок может использовать методы и атрибуты родительского класса, вызывая их через
super()или непосредственно. -
Переопределение методов: Потомок может переопределить методы родительского класса, чтобы изменить или дополнить их поведение.
Пример:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
# Создаем экземпляры классов-потомков
dog = Dog("Buddy")
cat = Cat("Whiskers")
# Вызываем методы, унаследованные от родительского класса Animal
print(dog.speak()) # Вывод: Buddy says Woof!
print(cat.speak()) # Вывод: Whiskers says Meow!