А чего именно вы хотите достичь? Чтобы можно было... что? Вы часто и помногу переопределяете функцию __getattribute__ и вам хочется сократить код? Тогда как вариант...
from functools import wraps
def wrap(f):
def tmp(self, name):
# print name
if name == 'test':
return 'some test'
elif name == 'another':
return 'another test'
else:
return f.__call__(object, name)
return tmp
class Some(object):
def __init__(self):
self.some_value = 10
@wrap
def __getattribute__(self, name):
if name == 'test1':
return 'test string'
return object.__getattribute__(self, name)
value = Some()
print value.test
print value.another
print value.test1
... выведет:
some test
another test
test string
ВАЖНОЕ УТОЧНЕНИЕ: я пришёл в Питон, когда уже была версия 2.7.2 и с ранними версиями не работал.
----------------------
Ответили уже, как вижу. А я дописал декоратор так, чтобы оно работало, лол.
# encoding: utf-8
def wrap(f):
def tmp(self, name):
arg, lang = name.split('_')
try:
return object.__getattribute__(self, name)
except AttributeError:
return object.__getattribute__(self, arg)
return tmp
class Some(object):
def __init__(self):
self.language = 'Language'
self.language_ru = u'Язык'
@wrap
def __getattribute__(self, name):
return object.__getattribute__(self, name)
value = Some()
print value.language_ru
print value.language_ch