我试图管理通过Python对象层次结构创建的目录树。我想在JSON中序列化顶级对象,这样我就可以与用户共享两件事:JSON文件和目录。我希望其他用户能够指向该目录,因此这里的问题是设置可能在另一台计算机上更改的根目录。
以下是我现在所拥有的一个例子:
import os.path as op
class Top():
def __init__(self, root_dir):
self._root_dir = root_dir
intop = InTop(self.base_dir)
self.intop = intop
@property
def root_dir(self):
return self._root_dir
@root_dir.setter
def root_dir(self, path):
self._root_dir = path
@property
def base_dir(self):
return op.join(self.root_dir, 'Top')
class InTop():
def __init__(self, root_dir):
self._intop_dir = op.join(root_dir, 'InTop')
@property
def intop_dir(self):
return self._intop_dir
@intop_dir.setter
def intop_dir(self, path):
self._intop_dir = path
我很高兴现在如何更新Top对象中的路径:
t = Top('~/projects/')
print(t.root_dir) # ~/projects/
print(t.base_dir) # ~/projects/Top
t.root_dir = '~/Downloads/'
print(t.root_dir) # ~/Downloads/
print(t.base_dir) # ~/Downloads/Top
但是有没有办法让这个改变传播到InTop对象?
t = Top('~/projects/')
print(t.root_dir) # ~/projects/
print(t.base_dir) # ~/projects/Top
print(t.intop.intop_dir) # ~/projects/Top/InTop
t.root_dir = '~/Downloads/'
print(t.root_dir) # ~/Downloads/
print(t.base_dir) # ~/Downloads/Top
print(t.intop.intop_dir) # ~/projects/Top/InTop <--- How to update this?
如何打印最后一行&#34;〜/ Downloads / Top / InTop&#34;代替?
也许有更好的方法来管理这样的相关文件路径 - 如果是这样,请告诉我。
提前致谢!
答案 0 :(得分:0)
想出来..只需要在Top setter中设置它(也纠正了我的setter)
import os.path as op
class Top(object):
def __init__(self, root_dir):
self._root_dir = root_dir
intop_obj = InTop(self.top_dir)
self.intop = intop_obj
@property
def root_dir(self):
return self._root_dir
@root_dir.setter
def root_dir(self, path):
self._root_dir = path
self.intop.top_dir = self.top_dir
@property
def top_dir(self):
return op.join(self.root_dir, 'Top')
class InTop(object):
def __init__(self, top_dir):
self._top_dir = top_dir
@property
def top_dir(self):
return self._top_dir
@top_dir.setter
def top_dir(self, top_dir):
self._top_dir = top_dir
@property
def intop_dir(self):
return op.join(self.top_dir, 'InTop')
得到我:
t = Top('~/projects/')
print(t.root_dir) # ~/projects/
print(t.top_dir) # ~/projects/Top
print(t.intop.intop_dir) # ~/projects/Top/InTop
t.root_dir = '~/Downloads/'
print(t.root_dir) # ~/Downloads/
print(t.top_dir) # ~/Downloads/Top
print(t.intop.intop_dir) # ~/Downloads/Top/InTop