代码之家  ›  专栏  ›  技术社区  ›  jss367

在Python中如何获取和设置带参数的属性

  •  0
  • jss367  · 技术社区  · 4 年前

    我正在尝试编写一个类,它允许我记录一个位置中zip文件的数量,并将该列表存储为一个属性,以便可以重复引用它。我不希望在初始化类时自动运行zip文件检查,因为它需要很长时间(它比这里写的要多)。我已经写过了,但是现在我想用新的功能来扩展它。我想增加两个功能。首先,我还希望能够在设置属性之后重新检查路径(假设我已经创建了类,然后将更多的文件移到目录中)。其次,我希望能够更改我在其中查找zip文件的目录。这是我最初的课程:

    class C:
    
        def __init__(self):
            self.zip_files_at_loc_ = None
            self.default_path = '~/default'
    
        @property
        def zip_files_at_loc(self):
            if self.zip_files_at_loc_ is None:
               self.zip_files_at_loc_ = glob.glob(self.default_path+"/*.zip")
            return self.zip_files_at_loc_
    

    def get_zips(self, path=None):
        if not path:
            path = self.default_path
        return glob.glob(path+"/*.zip")
    

    但这不再存储信息,所以我不得不反复计算。如何在保留的同时添加新功能 zip_files_at_loc 作为一种属性?这看起来像是一个简单的getter和setter方法可以工作,但是我无法向该方法添加可选的path变量 at this tutorial .

    0 回复  |  直到 4 年前
        1
  •  0
  •   Barmar    4 年前

    添加 reset() self.zip_files_at_loc_ 回到 None

    并将目录作为类的参数。要更改目录,只需使用不同的 C c.default_path() 然后打电话 c.reset()

    class C:
    
        def __init__(self, default_path = '~/default'):
            self.zip_files_at_loc_ = None
            self.default_path = default_path
    
        @property
        def zip_files_at_loc(self):
            if self.zip_files_at_loc_ is None:
               self.zip_files_at_loc_ = glob.glob(self.default_path+"/*.zip")
            return self.zip_files_at_loc_
    
        def reset(self):
            self.zip_files_at_loc_ = None