Каким образом можно вызвать этот метод у класса?
вы можете использовать функцию mro() или атрибут __mro__
mro() - []
__mro__ - ()
1. Что такое наследование?
2. Что выведет данный код?
class Person:
def __init__(self, name, age):
self.__name = name # устанавливаем имя
self.__age = age # устанавливаем возраст
@property
def age(self):
return self.__age
@age.setter
def age(self, age):
if age in range(1, 100):
self.__age = age
else:
print("Недопустимый возраст")
@property
def name(self):
return self.__name
def display_info(self):
print("Имя:", self.__name, "\tВозраст:", self.__age)
class Employee(Person):
def details(self, company):
# print(self.__name, "работает в компании", company) # так нельзя, self.__name -
приватный атрибут
print(self.name, "работает в компании", company)
tom = Employee("Tom", 23)
tom.details("Google")
tom.age = 33
tom.display_info()
1. Представляет собой механизм, позволяющий новому классу (подклассу или производному классу) наследовать свойства и методы существующего класса (родительского класса или базового класса). Это означает, что подкласс автоматически получает доступ к членам родительского класса, таким как атрибуты и методы, и может дополнять или изменять их, а также добавлять свои собственные.
2. Traceback (most recent call last):
File "/home/erlan/qa/qa.py", line 201, in <module>
tom.details("Google")
File "/home/erlan/qa/qa.py", line 197, in details
print(self.__name, "работает в компании", company) # так нельзя, self.__name - приватный атрибут
AttributeError: 'Employee' object has no attribute '_Employee__name'
Что делает метод issubclass?
Что делает метод isinstance?
1. проверка подкласса
2. проверка метода
Что такое __getitem__, __setitem__, __delitem__?
1. Вызывается, когда вы пытаетесь получить элемент объекта по индексу или ключу.
2.
3.
3) Чем удобен метод полиморфизм? Где его можно применить?
позволяет программистам писать более универсальный и гибкий код.
в методах
Что такое проблема ромба?
Проблема ромба (или ромбовидное наследование) возникает когда класс наследует от двух классов, которые сами являются потомками одного и того же базового класса
В данном случае Python использует порядок разрешения методов (MRO) для определения, какой метод вызывать. MRO определяет, в каком порядке Python ищет методы в иерархии наследования.
Что такое композиция?
Сильная связь между обьектами(композитами): Жизненные циклы владельца и включенного объекта тесно связаны. Если владелец уничтожается, то и включенный объект также уничтожается.
Что такое магические методы и зачем они нужны?
Магические методы предназначены для определения поведения объектов в различных контекстах, таких как создание, преобразование в строку, сравнение и т. д.
Какие методы вы знаете для перегрузки арифметических операторов?
Сложение (+):
Вычитание (-):
Умножение (*):
Деление (/):
Деление нацело (//):
Остаток от деления (%):
Возведение в степень (**):
Отрицание (- унарный):
Абсолютное значение (abs()):
Сравнение (<, <=, ==, !=, >=, >):
4) Что выводит следующий код?
class Parent():
def __init__(self):
print('Parent init')
def method(self):
print('Parent method')
class Child(Parent):
def __init__(self):
Parent.__init__(self)
def method(self):
super(Child, self).method()
child = Child()
child.method()
Parent method
Что выведет следующий код?
class A:
def hello(self):
print('hello world')
class B:
def hello(self):
print('HELLO WORLD')
class C(A, B):
pass
obj = C()
obj.hello()
1. Зачем нужен super()?
2. class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return 2 * self.length + 2 * self.width
# Here we declare that the Square class inherits from the Rectangle class
class Square(Rectangle):
def __init__(self, length):
super().__init__(length, length)
super() в Python - это встроенная функция, которая используется для вызова методов родительского класса. Она предоставляет доступ к методам и атрибутам родительского класса, что особенно полезно в контексте наследования и переопределения методов в подклассах.
2. результата корректный
Что такое конструктор и деструктор?
__new__
__del__
Что выполняет данная логика?
from os.path import join
class FileObject:
def __init__(self, filepath='~', filename='sample.txt'):
# открыть файл filename в filepath в режиме чтения и записи
self.file = open(join(filepath, filename), 'r+')
def __del__(self):
self.file.close()
del self.file
Данный код определяет класс FileObject, который представляет объект файла. В конструкторе (__init__) класса происходит открытие файла с использованием функции open из модуля os.path, и файл открывается в режиме чтения и записи ('r+'). Путь к файлу и его имя строятся с использованием функции join, где filepath является путем к директории, а filename - именем файла. Если при создании объекта не передаются значения для filepath и filename, то используются значения по умолчанию ('~' и 'sample.txt' соответственно).
Метод __del__ определен для закрытия файла при удалении объекта. В данном случае, метод __del__ закрывает файл, вызывая close(), и затем удаляет атрибут self.file с использованием del.
Важно отметить, что использование метода __del__ для закрытия файла не всегда является хорошей практикой, потому что не гарантируется, когда именно метод __del__ будет вызван (например, если сборщик мусора решит, что объект больше не нужен). Рекомендуется явно закрывать файл в явном порядке, например, с использованием конструкции with или явного вызова метода закрытия.
5) Каким образом можно получить доступ к родительскому методу из дочернего класса?
Использование имени родительского класса:
Использование встроенной функции super():
Что такое миксины? Для чего они нужны?
МИКСИНЫ(КЛАССЫ ПРИМЕСИ) - КЛАССЫ КОТОРЫЕ ИСПОЛЬЗУЮТСЯ ДЛЯ НАСЛЕДОВАНИЯ. ОТ МИКСИНОВ ОБЬЕКТЫ НЕ СОЗДАЮТ. ИХ ЗАДАЧА РАСШИРЯТЬ ФУНКЦИОНАЛ КЛАССА(ДОБАВЛЯЕМ МЕТОДЫ И АТРИБУТЫ) И НЕ ПРЕДНАЗНАЧЕНЫ ДЛЯ СОЗДАНИЯ ОБЬЕКТОВ.
Как вызвать метод унаследованного класса?
Для вызова метода унаследованного класса в Python используется ключевое слово super(). super() обеспечивает доступ к методам родительского класса, что позволяет вызвать метод из родительского класса в подклассе.
Что делает __new__, __init__, __del__?
1. Метод __new__ отвечает за создание нового экземпляра класса.
2. Метод __init__ отвечает за инициализацию созданного объекта.
3. Метод __del__ отвечает за освобождение ресурсов и выполнение операций при уничтожении объекта.
1) Что такое Полиморфизм в ООП? Привидите примеры
ПОЛИМОРФИЗМ - МЕТОДЫ НАЗЫВАЮТСЯ ОДИНАКОВО НО РАБОТАЮТ ПО РАЗНОМУ.
(РАЗНОЕ ПОВЕДЕНИЕ ОДНОГО И ТОГО ЖЕ МЕТОДА В РАЗНЫХ КЛАССАХ)
6) Какой вывод у следующего кода?
class English:
def greeting(self):
print ("Hello")
class French:
def greeting(self):
print ("Bonjour")
def intro(language):
language.greeting()
john = English()
gerard = French()
intro(john)
intro(gerard)
class English:
def greeting(self):
print("Hello")
class French:
def greeting(self):
print("Bonjour")
def intro(language):
language.greeting()
# Создаем объекты классов English и French
john = English()
gerard = French()
# Вызываем функцию intro, передавая объект john (типа English)
intro(john)
# Выводит "Hello", так как метод greeting в классе English печатает "Hello"
# Вызываем функцию intro, передавая объект gerard (типа French)
intro(gerard)
# Выводит "Bonjour", так как метод greeting в классе French печатает "Bonjour"
Hello
Bonjour
Что выполняет следующий код?
class GraphicalEntity:
def __init__(self, pos_x, pos_y, size_x, size_y):
self.pos_x = pos_x
self.pos_y = pos_y
self.size_x = size_x
self.size_y = size_y
class Button(GraphicalEntity):
def __init__(self, pos_x, pos_y, size_x, size_y):
super().__init__(pos_x, pos_y, size_x, size_y)
self.status = False
def toggle(self):
self.status = not self.status
class LimitSizeMixin:
def __init__(self, pos_x, pos_y, size):
size_x = min(size_x, 500)
size_y = min(size_y, 400)
super().__init__(pos_x, pos_y, size_x, size_y)
class LimitSizeButton(Button, LimitSizeMixin):
pass
b = LimitSizeButton(10, 20, 200, 100)
&&&
От чего наследуется любой класс в питоне и что такое object?
В Python любой класс автоматически наследуется от встроенного базового класса object
object в Python — это встроенный базовый класс, который является корневым классом для всех остальных классов в языке.
Что такое __getattr__, __setattr__, __delattr__?
1. __getattr__Вызывается, когда атрибут не найден обычным способом, например, если пытаетесь получить значение атрибута, которого нет.
2. __setattr__ Вызывается при попытке установить значение атрибута.
3. __delattr__ Вызывается при попытке удалить атрибут с использованием оператора del.
2) Что выполняет следущий код? Какой у него вывод?
class Mammal:
def move(self):
print('Двигается')
class Hare(Mammal):
def move(self):
print('Прыгает')
animal = Mammal()
animal.move()
hare = Hare()
hare.move()
Двигается
Прыгает
7) Каким образом реализовать обязательное переопределение родительского метода в
дочерних классах?
можно использовать абстрактные методы с использованием модуля abc (Abstract Base Classes) для достижения подобного эффекта.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side ** 2
# Пример использования
circle = Circle(5)
square = Square(4)
print(circle.area()) # Выведет площадь круга
print(square.area()) # Выведет площадь квадрата