D = None
def __init__(self, s):
self.s = s
self.__class__.D = self.s
def p(self, a = D):
print(a)
o = A(s)
o.p()
# None
o.D
# 1
как сделать, чтобы при вызове метода p без аргументов, печаталось то, что в s? Т.е. как мне внешнюю зависимость прокинуть в дефолт метода класса?
ай
print(self.s)?
привет. мне надо чтобы в методе подтянулось значение из внешней зависимости.. типа async def get_template_collection( self, page_number: Optional[int] = Query(START_PAGE_NUMBER, ge=1, alias='pageNumber'), page_size: Optional[int] = Query(DEFAULT_PAGE_SIZE, ge=0, alias='pageSize'), но DEFAULT_PAGE_SIZE я хочу в настройках проекта определять
class A: def __init__(self, s): self.s = s def p(self, a = None): print(self.s if a is None else a) Так?
типа, но нет, но видимо по другому никак
Ну дефолтные значения аргумента не во время исполнения функции считаются же
я это понимаю, что во время создания, в этом и вопрос, как во время создания внешнюю зависимость считать
а причем тут __class__, не надо в классе ничего хранить
а как тогда затянуть в метод в качестве дефолта переменной внешнюю зависимость?
куда сохранить и потом как считать?
Тут человеку до завтра надо отдохнуть, подготовиться хорошо
просто прикол в том, что в методе при объявлении нет еще self окружения, потому что self не известен.
А что такое self окружение?
ну ты говоришь в инициализатор передать, а как потом это попадет в метод, если метод уже сконструирован в момент сборки класса?
имею ввиду переменные объекта-построенного самого
Метод имеет ссылку на self при вызове и оттуда может читать
дык. ты предлагаешь типа так сделать: async def get_template_collection( self, page_number: Optional[int] = Query(START_PAGE_NUMBER, ge=1, alias='pageNumber'), page_size: Optional[int] = Query(self.DEFAULT_PAGE_SIZE, ge=0, alias='pageSize'), ) но в этот момент нет никакого self
Нет, я предлагаю сделать как показали выше
типа так def p(self, a = None): print(self.s if a is None else a) ?
Я не говорил, что лучшее из всех решений, это был ответ на вопрос до этого. А так можно и не None в качестве значения по умолчанию использовать. Но надо понимать применимость значений по умолчанию
да не суть нон не нон, важно что в теле метода придется видимо проверять значение
Если оно во время исполнения может меняться или зависит от рантайма — да, по крайней мере, я других очевидных путей не вижу
нет. не зависит, просто хранится во внешних зависимостях
У тебя вот тут значение аргумента по умолчанию зависит от состояния объекта
Что такое "внешняя зависимость"?
паттерн dependency injection
Обсуждают сегодня