Клас у Python — це шаблон, який об'єднує змінні (поля) і функції (методи) в єдину сутність. Це дозволяє створювати об'єкти з певними характеристиками та поведінкою. Клас можна уявити як форму для випічки, а об'єкти класу — як печиво, що випікається за цією формою, але з різними начинками.
class User:
name = 'UserName'
age = 15
Тут створено клас User
з полями name
та age
.
Об'єкти класу створюються шляхом виклику класу як функції. Об'єкти можуть мати різні значення полів, навіть якщо створені з одного класу.
user1 = User()
print(user1.name) # 'UserName'
print(user1.age) # 15
user2 = User()
user2.name = "John"
user2.age = 90
print(user2.name) # 'John'
print(user2.age) # 90
Атрибути класу включають поля (змінні) і методи (функції). Методи працюють з полями класу та можуть мати доступ до них через параметр self
.
class User:
name = 'UserName'
age = 15
def say_name(self):
print(f'Hi! I am {self.name} and I am {self.age} years old.')
def set_age(self, age):
self.age = age
bob = User()
bob.name = 'Bob'
bob.say_name() # Hi! I am Bob and I am 15 years old.
bob.set_age(25)
bob.say_name() # Hi! I am Bob and I am 25 years old.
Конструктор класу — це спеціальний метод __init__()
, який викликається автоматично при створенні нового об'єкта. Він ініціалізує поля об'єкта.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greeting(self):
return f"Hi {self.name}"
p = Person("Boris", 34)
print(p.name) # Boris
print(p.age) # 34
print(p.greeting()) # Hi Boris
Наслідування дозволяє створювати нові класи на основі існуючих, додаючи або перевизначаючи атрибути.
class Human:
name = ''
def voice(self):
print(f"Hello! My name is {self.name}")
class Developer(Human):
field_description = "My Programming language"
language = ""
def make_some_code(self):
return f"{self.field_description} is {self.value}"
class PythonDeveloper(Developer):
value = "Python"
class JSDeveloper(Developer):
value = "JavaScript"
p_dev = PythonDeveloper()
p_dev.name = 'Bob'
p_dev.voice() # Hello! My name is Bob
p_dev.make_some_code() # My Programming language is Python
js_dev = JSDeveloper()
js_dev.make_some_code() # My Programming language is JavaScript
MRO визначає порядок пошуку атрибутів у разі наслідування від кількох класів. Python шукає атрибут спочатку в класі, з якого створено об'єкт, потім у його батьківському класі, і так далі.
class A:
x = 'I am A class'
class B:
x = 'I am B class'
y = 'I exist only in B'
class C(A, B):
z = "This exists only in C"
c = C()
print(c.z) # This exists only in C
print(c.y) # I exist only in B
print(c.x) # I am A class
Якщо змінити порядок наслідування, результат зміниться.