Возвращение класса Python
Всем добрый вечер. Скажите, в каких случая нужно возвращать сам класс? Например для метода __ lshift __ нужно возвращать класс: P.S. Note - класс
def __lshift__(self, other):
return Note(list_with_n[(list_with_n.index(self.a) - other) % N], self.f)
Зачем нам нужно писать return CLASS_NAME? Когда и зачем нужно возвращать класс?
Ответы (4 шт):
Возвращать класс нужно в вызывающую функцию,чтобы она воспользовалась методами этого обьекта,ведь возвращается обьект класса,ну а этот обьект по какой то причине был создан в вызываемой функции,например если вы list создаете внутри функции вы можете передать ссылку на него.
Ну вот вам искусственный пример, в котором возвращается и используется класс:
import random
class A:
def do():
print('Welcome!')
class B:
def do():
print('Привет!')
class C:
def random_hello():
if random.randint(0,2) == 0:
return A
else:
return B
c = C.random_hello()
c.do()
В переменной c получается случайным образом либо класс A, либо класс B, и мы вызываем функцию этого класса, не зная, какой у нас класс, нам всё-равно, у них у обоих есть эта функция.
В вашем же примере возвращается экземпляр класса, это практически тоже самое, что в моём примере, но у вас получается как бы настроенный класс. Т.е. класс то вы возвращаете один и тот же, но поведение у него может быть разное в зависимости от инициализации класса. Опять же пример:
import random
class A:
def __init__(self, word):
self.welcome = word
def do(self):
print(self.welcome)
class B:
def make_hello(word):
return A(word)
c = B.make_hello('Привет!')
d = B.make_hello('Welcome!')
c.do()
d.do()
Вывод:
Привет!
Welcome!
У вас в примере нет возврата класса: Note(...) - это создание нового объекта вашего класса.
Зачем тут создается этот объект:
В результате применения оператора (оператора сдвига в данном случае) обычно получается объект (новый или уже существующий) того же класса, что и изначальный объект: по аналогии, если мы делаем сдвиг влево для целого числа, то результатом будет тоже целое число (объект класса "целое число"). Так и здесь - когда вы применяете оператор к своему объекту, оператор возвращает новый объект этого класса.
В целом, результатом выполнения оператора может быть и объект другого класса (например, при делении целого числа на целое может получиться число с плавающей точкой). Но в данном случае логично возвращать именно объект того же класса.
Например, чтобы использовать декораторы для классов, которые перегружают/изменяют внутренние методы.