Ответ
В Python параметры для инициализации объекта передаются в его специальный метод __init__, который является инициализатором (часто его называют конструктором).
Когда вы создаете экземпляр класса, например my_obj = MyClass(arg1, arg2), Python автоматически вызывает MyClass.__init__(my_obj, arg1, arg2), где my_obj передается в первый аргумент self.
Основной пример
class User:
# Метод-инициализатор
def __init__(self, username: str, email: str):
print(f"Создание нового пользователя {username}...")
# Присваивание параметров атрибутам экземпляра
self.username = username
self.email = email
self.is_active = True # Атрибут со значением по умолчанию
# Создание экземпляра (объекта) с передачей параметров
user1 = User("alice", "alice@example.com")
print(user1.username) # Вывод: alice
print(user1.is_active) # Вывод: True
Ключевые моменты
-
self: Первый параметр (self) всегда ссылается на сам создаваемый экземпляр. Он передается неявно и позволяет внутри метода обращаться к атрибутам и методам объекта (например,self.username). -
Аргументы по умолчанию: Как и в обычных функциях, в
__init__можно задавать значения по умолчанию:def __init__(self, username, role='guest'):. -
Позиционные и именованные аргументы: Параметры можно передавать как позиционно (
User('bob', 'bob@a.com')), так и по имени (User(email='bob@a.com', username='bob')), что повышает читаемость кода. -
Наследование: В дочерних классах для инициализации атрибутов родительского класса необходимо вызывать его инициализатор через
super().__init__(...).
class Admin(User):
def __init__(self, username, email, access_level):
# Вызов __init__ родительского класса User
super().__init__(username, email)
self.access_level = access_level
admin = Admin("root", "root@system.local", 5)
print(admin.username) # Вывод: root
print(admin.access_level) # Вывод: 5