Как стать автором
Обновить
1
0
Вячеслав Кузнецов @ya_ne_znau

Пользователь

Отправить сообщение

Чем это хуже использования типа-суммы? Такой подход плох тем, что можно создать концептуально невалидное значение 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
		)

Вот моя версия, надеюсь, вы это вынесите:

def cached(func, data={}, _s=object()): return lambda *args: ((data.__setitem__(f"{func.__name__}({args})", func(*args)), data[f"{func.__name__}({args})"])[1]) if data.get(f"{func.__name__}({args})", _s) is _s else data[f"{func.__name__}({args})"]

Зачем здесь всё?

  1. data - собственно кеш, так потому что в 1 строку

  2. _s как sentinel тоже самое, но чтобы различать None после вызова и отсутствие результата

Можно было бы впихнуть в параметры лямбду по получению ключа, но пока зачем.

(data.__setitem__("<>", func(*args)), data["<>")[1]

Это создание кортежа, в котором происходит запись результата функции и тут же рядом достается, потому что не везде есть 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) вспомнил игру про гонки на нокии, где была красная — твоя и синие — другие. хотел доехать до того города на заднем плане

Съемка должна вестись на камеру мобильного телефона, т.к. одно из мест для публикации, это Instagram, в котором опубликовать видео можно только с мобильника

в чём проблема записать весь хронометраж на профессиональное оборудование, а затем перенести на сти на смартфон?

Здесь большое неудобство доставляет система координат, выбранная в игре: вертикальная ось — это координата Y, а горизонтальная плоскость — XZ

не понимаю, как ещё может быть, всё правильно, 3 оси, в чем проблема?

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность