Pyro4 и простые старые объекты данных
У меня есть объект, который я выставляю с помощью Pyro4 и который возвращает объект POD:
import Pyro4
@Pyro4.expose
class POD:
def __init__(self):
self.a = 1
@Pyro4.expose
class Source:
def get(self):
p = POD()
daemon.register(p)
return p
daemon = Pyro4.daemon()
ns = Pyro4.locateNS()
uri = daemon.register(Source)
ns.register('test_obj', uri)
daemon.requestLoop()
Но когда я пытаюсь получить этот объект так:
import Pyro4
s = Pyro4.Proxy('PYRONAME:test_obj')
o = s.get()
print(o.a)
Я получаю исключение, как это:
Pyro4.errors.PyroError: remote object doesn't expose any methods or attributes. Did you forget setting @expose on them?
Есть ли какой-нибудь способ вернуть объекты POD и использовать их поля, или мне нужно предоставить эти поля через методы или свойства?
1 ответ
Из документации для серверной части, раздел Создание класса Pyro и предоставление его методов и свойств:
Вы не можете выставлять атрибуты напрямую. Требуется предоставить
@property
для них и украсить это@expose
, если вы хотите предоставить удаленно доступный атрибут.
Так что вам нужно изменить POD
класс для:
@Pyro4.expose
class POD:
def __init__(self):
self._a = 1
@property
def a(self):
return self._a
# Only necessary when setting the property should be possible.
@a.setter
def a(self, value):
self._a = value