在Python中设计nosql数据库应用程序时,我遇到了以下几种模式:
我想要的是动态存储对象层次结构中某些数据的引用,这样我就可以访问数据并知道它在层次结构中的位置。
例如,假设我有一个对象结构,如:
class A(object):
def __init__(self, val1, val2):
self.val1 = val1
self.val2 = val2
class B(object):
def __init__(self, a):
# a is an instance of A
self.a = a
class C(object):
def __init__(self, b):
# b is an instance of B
self.b = b
a = A(0,1)
b = B(a)
c = C(b)
现在,我想(动态)引用存在于c
对象内部的一些数据
假设我想引用val1
中A
内B
的{{1}}。我正在做的是制作一个'breadcrumb'元组c
来引用数据。然后,我将使用这些面包屑来引用我想要引用的任何类继承自基类class ('b', 'a', 'val1')
,它定义了递归地解析面包屑并使用Breadcrumb
返回数据的方法是指。
这是一种模式吗?反模式?有没有办法更简单地做到这一点,或重新设计我的程序,所以我没有?
答案 0 :(得分:1)
我没有看到对您访问的类进行干扰有多大好处(引入超类计数作为侵入性。)为什么他们需要知道他们的属性是以这种方式还是以这种方式访问?他们已经支持getattr
,这就是实现这一目标所需的全部内容。
我只想编写一个自由函数iterative_getattr(obj, attrs)
(可能有更好的名称),它可以处理任何对象并访问由attrs
元组定义的属性链。