生成并解析到对象的路径。

z3c.objpath的Python项目详细描述


对象路径

这个包裹包含两件事:

  • z3c.objpath.interfaces.IObjectPath接口。
  • 一些用于构造(相对)对象路径的辅助函数,在 z3c.objpath.path

其思想是特定的应用程序可以实现 实现IObjectPath接口,以便 以统一的方式构造到对象的路径。实施可能是 使用zope.traversing完成,但在某些情况下您需要 特定于应用程序的对象路径。在本例中,函数 z3c.objpath.path可能有用。

我们将有一个简单的项目:

>>> class Item(object):
...   __name__ = None
...   __parent__ = None
...   def __repr__(self):
...     return '<Item %s>' % self.__name__

让我们创建一个类似容器的简单对象:

>>> class Container(Item):
...   def __init__(self):
...     self._d = {}
...   def __setitem__(self, name, obj):
...     self._d[name] = obj
...     obj.__name__ = name
...     obj.__parent__ = self
...   def __getitem__(self, name):
...     return self._d[name]
...   def __repr__(self):
...     return '<Container %s>' % self.__name__

现在让我们创建一个结构:

>>> root = Container()
>>> root.__name__ = 'root'
>>> data = root['data'] = Container()
>>> a = data['a'] = Container()
>>> b = data['b'] = Container()
>>> c = data['c'] = Item()
>>> d = a['d'] = Item()
>>> e = a['e'] = Container()
>>> f = e['f'] = Item()
>>> g = b['g'] = Item()

我们现在将执行两个函数,pathresolve,这两个函数 彼此是相反的:

>>> from z3c.objpath import path, resolve

我们可以从root

创建到a的路径
>>> path(root, a)
'/root/data/a'

我们也可以再次解决:

>>> resolve(root, '/root/data/a')
<Container a>

我们还可以从data

创建到a的路径
>>> path(data, a)
'/data/a'

再解决一次:

>>> resolve(data, '/data/a')
<Container a>

我们可以做一个更深入的路径:

>>> path(root, f)
'/root/data/a/e/f'

并解决它:

>>> resolve(root, '/root/data/a/e/f')
<Item f>

路径'/'指向根对象:

>>> resolve(root, '/')
<Container root>

如果无法构造路径,则会出现错误:

>>> path(e, a)
Traceback (most recent call last):
 ...
ValueError: Cannot create path for <Container a>

如果无法解析路径,也会出现错误:

>>> resolve(root, '/root/data/a/f/e')
Traceback (most recent call last):
 ...
ValueError: Cannot resolve path /root/data/a/f/e

z3c.objpath更改

1.2(2018-06-14)

  • 添加对python 3.5、3.6、pypy和pypy3的支持。

1.1(2012-10-13)

  • 为z3c添加名称空间声明。
  • 添加了一个测试额外的,因为测试需要zope.testing

1.0(2008-04-15)

  • 首次公开发行。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何将java ArrayList对象转换为实际值   web服务如何在JAVA类uisng JAXBElement中解组SOAP UI值   包含无值参数的java HttpClient表单URL   运行简单Camel Restlet演示项目的java问题?   带有自定义图标的java简单SWT警报消息?   java Netbeans 6.8:LibImport可以工作,但编译时“包不存在”   java如何获得绘画完成的通知?   java Hazelcast客户端模式群集故障后如何恢复?   Neo4J中Shapefile的java批插入   为什么ThreadPoolExecutor在Eclipse和从命令行运行Java程序时表现不同?   java在Android中计算两个坐标之间的距离时得到了荒谬的值   java在CardLayout中显示卡本身的下一张卡