2017-02-10 18 views
0

То, на что я нацеливаюсь, имеет объект в python3, который ведет себя как обычно в отношении доступа к атрибуту, за исключением того, что если атрибут недоступен при обычном поиске он должен отображать/вычислять значение каким-либо другим способом.Есть ли хороший (r) способ иметь значения по умолчанию в объектах

Я знаю, что один мог решить эту проблему путем определения метода __getattr__:

def __getattr__(self, key): 
    if key == 'foo': 
     return calculate_default_foo() 
    elif key == 'bar': 
     return getattr(dfltobj, 'bar') 
    elif key == 'frob': 
     return 42 
    raise AttributeError 

но чувствует себя так python2, так что я интересно, если есть более элегантный способ сделать это в Python3. Просто определение property s не так хорошо работает, поскольку они полностью перекрывают доступ к этому атрибуту, но в противном случае это был бы хороший подход, если бы он сработал.

ответ

0

Я не думаю, что есть способ вокруг него, но есть хороший (г) способ модификации __getattr__:

def __getattr__(self, item): 
    if item == "foo" and not self.foo: 
     return calculate_default() 
    return self.__getattribute__(foo) 

Надеется, что это помогло :)

+0

Я думаю, вы поняли на вопрос немного. Цель состоит в том, что 'foo.attr2' должен давать значение по умолчанию (которое может потребоваться вычислять на лету). – skyking

+0

Мой плохой! Кажется, я получил его сейчас. – mikelsr

 Смежные вопросы

  • Нет связанных вопросов^_^