Я чувствую себя немного грязным, взламывая что-то подобное вместе, но вы могли бы использовать для этого какой-то прокси-класс:
class Proxy():
def __init__(self, value, parent):
self.value = value
self.parent = parent
def __getattr__(self, attr):
return self.parent.__getattribute__(attr + '_value')(self.value)
class Foo():
def __init__(self):
self.a = '123'
self.b = '234'
self.c = 'foo_Bar'
def hex_value(self,attribute):
return hex(int(attribute))
def repeated_value(self,attribute):
return attribute + " " + attribute + " " + attribute
def __getattribute__(self, attr):
if not attr.endswith('_value') and not attr.startswith('__'):
return Proxy(super(Foo, self).__getattribute__(attr), self)
return super(Foo, self).__getattribute__(attr)
if __name__=="__main__":
obj = Foo()
print(obj.a.hex) # should give hex value of 'a' by simply using dot operator.
print(obj.c.repeated) # prints 'foo_Bar foo_Bar foo_Bar'
Идея в том, что все, к чему вы получаете доступ в Foo
, завернутый в прокси. И все, к чему вы обращаетесь в прокси-сервере, что недоступно, вместо этого вызывается создателем прокси (с добавленным '_value').
Но то, что вы можете, не означает, что вы должны.