如何嵌套包装类实例并直接访问属性?仿pathlib.Path实现
如何实现嵌套包装类实例的透明属性访问?
是否可以像下方示例一样,按需多次嵌套包装类实例,同时仍能像未包装时一样访问其属性?
class MyPath: def __init__(self, path=None): self.path = path print(MyPath('my/file/path.txt').path) # 输出: my/file/path.txt print(MyPath(MyPath('my/file/path.txt')).path) # 输出: <__main__.MyPath object at 0x105061ed0>
pathlib.Path实现了该特性,但我没法从源码里理清具体实现逻辑。
我目前想到的一种简单实现方案如下:
class MyPath: def __init__(self, instance_or_path=None): self._instance_or_path = instance_or_path @property def path(self): if isinstance(self._instance_or_path, MyPath): return self._instance_or_path.path return self._instance_or_path
但我希望找到一种无需类型检查的更优方案。
补充说明:如果类仅包含少量属性,上述方案或@Andr0id16提出的鸭子类型变体还可行,但属性较多时,每个属性都要添加类型检查或try/except会非常繁琐。
内容的提问来源于stack exchange,提问作者knerg
相关产品推荐
相关产品推荐

