применение отражения в python для косвенного вызова объектов из другого класса - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь создать такой класс, как Proxy, который косвенно обращается ко всем методам моих объектов, например, например:

class Radio():   
    def __init__(self):        
        self._channel = "channel"        

    def get_channel(self):        
        return self._channel    

    def set_channel(self, value):        
        self._channel = value   

class Proxy:
    def __init__(self, obj):        
        self.obj = obj

    # rest of the code
        


radio = Radio()
radio_proxy = Proxy(radio)
print(radio_proxy.get_channel())     

, поэтому он работает точно так же, как print (radio.get_channel ( )) !!! но я на самом деле застрял, как это сделать, я знаю, что каким-то образом я должен использовать getattr и прочее, но я действительно не знаю, как их использовать

1 Ответ

0 голосов
/ 03 августа 2020

Вы почти у цели:

class Proxy:
    def __init__(self, obj):        
        self.obj = obj

    def __getattr__(self, attr):
        return getattr(self.obj, attr)

Это не обрабатывает "dunder методы", ie. вы не можете сделать:

a = Proxy(5)
a + 37

, но для обычных методов (и атрибутов) все должно быть в порядке.

...