使用self从其他函数调用变量_变量,以及为什么它似乎是随机的而不是随机的(一定有原因)



我有一段代码,我正试图一段一段地理解。

在一个类(称为:"Window"(中,有很多函数通过self的方法相互引用_变量

例如,此loadFiles(self(函数提供self_文件名(倒数第二行(:

def loadFiles(self):
if self.sourceDirectory.text():
initDir = self.sourceDirectory.text()
else:
initDir = str(Path.home())
files, filter = QFileDialog.getOpenFileNames(
self, "Choose Files to Rename", initDir, filter=FILTERS
)
if len(files) > 0:
sourceDirectory = str(Path(files[0]).parent)
self.sourceDirectory.setText(sourceDirectory)
for file in files:
self._files.append(Path(file))
self._filesCount = len(self._files)
self._filenames = files
self.current_index = 0

下面的这个函数可以很容易地读取该变量,它位于最上面的一行(self._current_index来自代码的其他地方(。但我就是不明白,为什么是自己_变量(最后一行(我制作的不起作用?当我尝试将我的变量调用到另一个函数时,行extension=self_测试我得到这个属性错误:"Window"对象没有属性"_test":

def renameFiles(self):
filename = self._filenames[self._current_index]
newFilename = self.createNewFilename()
self.currentFileName.setText(newFilename)
dirname = os.path.dirname(filename)
fullPath = os.path.join(dirname, newFilename)
os.replace(filename,fullPath)
self._filenames[self._current_index] = fullPath
self.current_index = self._current_index
self._test = fullPath

我希望你能理解我在这里追求的是什么。如果需要,我可以提供更多信息。

以下是处于清理工作状态的整个代码,除了它需要其他.py文件才能完全运行:https://gist.github.com/manujarvinen/fc727cd1d12b6ef2c708a40c32cc3ce1

如果你想签出这个项目的所有文件,请在这里获取它们(PyQt5和Python3(:https://files.manujarvinen.com/MyMaterial_Rename_Tool_v1.1.zip

在构造函数内设置具有sentinel值的实例变量,然后在方法内对其进行检查,并使程序做出相应反应,例如:

if self._test is None:
do_something
else:
do_else

如果你不希望你的__init__是临时变量初始化的整体聚合,你可以通过调用hasattr((来检查它们的存在,例如:

if not hasattr(self, "_test"):
do_something
else:
do_else

最新更新