Чем это хуже использования типа-суммы? Такой подход плох тем, что можно создать концептуально невалидное значение SignInMethod(), все атрибуты которого будут None.
Так проблема в том, что и в нормальном ООП так никто не делает, это костыли.
Зато можно (и будет лучше) спокойно сделать какой-нибудь абстрактный класс (может и интерфейс, но он не сильно сюда подходит, как по мне) с методом входа, затем переопределить этот метод в наследниках, а не воротить кучу опциональных полей, тем более что такой тип не должен быть валидным, как вы и написали, будет пропускать дополнительные значения.
from abc import abstractmethod, ABC
class Client:
"""
Условный класс для объектов, осуществляющих вход
"""
pass
class SignInMethod(ABC):
@abstractmethod
def sign_in(self, client: Client): ...
class SignInWithEmail(SignInMethod):
def __init__(self, email: str, password: str):
self._email = email
self._password = password
# override только для заглушкек
def sign_in(self, client: Client):
client.sign_in_with_email(
self._email,
self._password
)
Это создание кортежа, в котором происходит запись результата функции и тут же рядом достается, потому что не везде есть walrus operator и вообще я его не очень люблю, зато __setitem__ является обычной функцией и возвращает ничего, то есть является валиднвм выражением в отличие от data["<>"] = func(*args).
Хмм, как много Путина в Яндекс браузере и стартовой странице, то есть, чтобы клепать новости про политику, достаточно просто поставить ябраузер или стартовую yandex.ru
здесь вместо лямбды можно было бы использовать ссылку на функцию parseInt, для примера было бы лучше использовать какую-нибудь функцию из 2 аргументов или подобного, например (n) => parseInt("1" + n + "00"))
Съемка должна вестись на камеру мобильного телефона, т.к. одно из мест для публикации, это Instagram, в котором опубликовать видео можно только с мобильника
в чём проблема записать весь хронометраж на профессиональное оборудование, а затем перенести на сти на смартфон?
Так проблема в том, что и в нормальном ООП так никто не делает, это костыли.
Зато можно (и будет лучше) спокойно сделать какой-нибудь абстрактный класс (может и интерфейс, но он не сильно сюда подходит, как по мне) с методом входа, затем переопределить этот метод в наследниках, а не воротить кучу опциональных полей, тем более что такой тип не должен быть валидным, как вы и написали, будет пропускать дополнительные значения.
Вот моя версия, надеюсь, вы это вынесите:
Зачем здесь всё?
data - собственно кеш, так потому что в 1 строку
_s как sentinel тоже самое, но чтобы различать None после вызова и отсутствие результата
Можно было бы впихнуть в параметры лямбду по получению ключа, но пока зачем.
Это создание кортежа, в котором происходит запись результата функции и тут же рядом достается, потому что не везде есть walrus operator и вообще я его не очень люблю, зато __setitem__ является обычной функцией и возвращает ничего, то есть является валиднвм выражением в отличие от data["<>"] = func(*args).
Хмм, как много Путина в Яндекс браузере и стартовой странице, то есть, чтобы клепать новости про политику, достаточно просто поставить ябраузер или стартовую yandex.ru
<code lang="Typescript">const parsed = map(['1', '2', '3'], (n) => parseInt(n))</code>
здесь вместо лямбды можно было бы использовать ссылку на функцию parseInt, для примера было бы лучше использовать какую-нибудь функцию из 2 аргументов или подобного, например (n) => parseInt("1" + n + "00"))
(7) вспомнил игру про гонки на нокии, где была красная — твоя и синие — другие. хотел доехать до того города на заднем плане
в чём проблема записать весь хронометраж на профессиональное оборудование, а затем перенести на сти на смартфон?
не понимаю, как ещё может быть, всё правильно, 3 оси, в чем проблема?