python - 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 对象并使用它们的字段,还是我需要通过方法或属性公开这些字段?
解决方案
在服务器端的文档中,创建 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
推荐阅读
- linux - 如何在程序中找到 MMAPable 虚拟地址的范围?
- python - 尝试在 Odoo 14 中保存常规选项时出错
- c# - c#将多附件Outlook电子邮件拆分/复制到单个电子邮件,每个电子邮件一个附件
- c++ - 具有昂贵操作的线程会减慢 UI 线程 - Windows 10、C++
- java - java函数如何通过模板或其他方式采用各种参数类型?
- flutter - 为什么我的 URI 导入 'package:google_sign_in/google_sign_in.dart'; 在 vscode 中不工作
- matlab - 如何在球坐标中找到二维拉普拉斯方程的 Matlab PDE 系数
- jquery - 带有偏移量的 Jquery 平滑滚动
- r - 在 R 中,通过在嵌套列表中用 NA 替换 NULL 来防止 unlist 删除 NULL 值
- facebook-group - 来自用户的 Facebook Graph API 组评论