我有一个用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对象并使用它们的字段,还是需要通过方法或属性公开这些字段?
发布于 2018-05-16 15:34:01
从服务器端的文档中,创建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 = valuehttps://stackoverflow.com/questions/50352337
复制相似问题