首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyro4和普通的旧数据对象

Pyro4和普通的旧数据对象
EN

Stack Overflow用户
提问于 2018-05-15 14:06:18
回答 1查看 853关注 0票数 3

我有一个用Pyro4公开的对象,它返回一个POD对象:

代码语言:javascript
复制
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()

但是当我试图像这样检索这个对象时:

代码语言:javascript
复制
import Pyro4
s = Pyro4.Proxy('PYRONAME:test_obj')
o = s.get()
print(o.a)

我得到了这样的例外:

代码语言:javascript
复制
Pyro4.errors.PyroError: remote object doesn't expose any methods or attributes. Did you forget setting @expose on them?

是否有方法返回POD对象并使用它们的字段,还是需要通过方法或属性公开这些字段?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-16 15:34:01

从服务器端的文档中,创建Pyro类并公开其方法和属性

不能直接公开属性。如果您想提供一个可远程访问的属性,则需要为它们提供一个@property,并使用@expose来装饰它。

因此,您需要将POD类更改为:

代码语言:javascript
复制
@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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50352337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档