J'ai une classe de base qui a 2 attributs qui sont eux-mêmes d'une autre classe. Voir le code ci-dessousFonction __getattribute__ pour renvoyer la valeur d'objet d'une autre classe
class Base(object):
def __init__(self, obj1, obj2):
self.obj1 = obj1
self.obj2 = obj2
def __getattribute__(self, name):
#import pdb; pdb.set_trace()
if name == 'obj1':
obj = object.__getattribute__(self, name) #self.obj1.value
return object.__getattribute__(obj,'value')
class Temp(object):
def __init__(self, value, type):
self.value = value
self.type = type
def __getattribute__(self, name):
#if name == 'value':
# return object.__getattribute__(self, name)
if name == 'type':
return object.__getattribute__(self, name)
if __name__ == "__main__":
temp_obj1 = Temp(45, type(45))
temp_obj2 = Temp('string', type('string'))
base_obj = Base(temp_obj1, temp_obj2)
print base_obj.obj1
print base_obj.obj1.type
et sa sortie: -
45
Traceback (most recent call last):
File "getattr.py", line 29, in <module>
print base_obj.obj1.type
AttributeError: 'int' object has no attribute 'type'
En fait ce que je suis en train de réaliser est que je n'ai pas appeler base_obj.obj1.value
pour obtenir l'attribut value
de obj1
mais appelant base_obj.obj1
sera donne le résultat désiré. Mais en même temps, je suis en mesure d'appeler une fonction ou une propriété de obj1
comme base_obj.obj1.type
ou base_obj.obj1.some_method()
Mais comme vous pouvez le voir, je reçois l'erreur. Comment puis-je obtenir la fonctionnalité souhaitée