如何在Python中将变量信息从一个类传递到另一个类

如何在Python中将变量信息从一个类传递到另一个类,python,class,unit-testing,global-variables,parameter-passing,Python,Class,Unit Testing,Global Variables,Parameter Passing,在Python中如何将变量信息从一个类传递到另一个类上,我一直在苦苦挣扎。我正在创建一个程序,它根据扩展名或文件名检测文件类型。我最初将文件名设置为args的任何名称(目前为硬编码,但将使用argparse)。如果我检测到一个zip文件,那么我将提取zip并拉出test.xml,然后将该文件路径重新分配给变量。然而,当我从另一个类调用它时,我得到了旧的路径(从args分配)。我对Python还不熟悉,这让我很恼火。希望有人能帮我。下面是我的代码示例: 主要类别: class ValidateTe

在Python中如何将变量信息从一个类传递到另一个类上,我一直在苦苦挣扎。我正在创建一个程序,它根据扩展名或文件名检测文件类型。我最初将文件名设置为args的任何名称(目前为硬编码,但将使用argparse)。如果我检测到一个zip文件,那么我将提取zip并拉出test.xml,然后将该文件路径重新分配给变量。然而,当我从另一个类调用它时,我得到了旧的路径(从args分配)。我对Python还不熟悉,这让我很恼火。希望有人能帮我。下面是我的代码示例:

主要类别:

class ValidateTest(Parameterize.ParametrizedTestCase):
    def __init__(self):
        parser = argparse.ArgumentParser(description='' + '')
        parser.add_argument('-d', '--driver', help='Path and file name of xml or zip driver file', required=True)
        parser.add_argument('-v', '--verbosity',
                            help='Verbosity for test output.  1 for terse, 2 for verbose.  Default is verbose',
                            default=1, type=int)
        args = "c:\\test.zip"
        self.filename = args
        #self.verbosity = args.verbosity

    def main(self):
        # Test for a valid xml file.  This could be a .xml, .zip, or test.xml
        if os.path.splitext(os.path.basename(self.filename))[1] == '.xml':
            self.assertTrue(True, logger.passed("A file with a valid extension of '.xml' was detected."))
        elif os.path.basename(self.filename) == 'test.xml':
            self.assertTrue(True, logger.passed("A file with the valid name of 'test.xml' was detected."))
        elif os.path.splitext(os.path.basename(self.filename))[1] == '.zip':
            self.assertTrue(True, logger.passed("A file with the valid extension of '.zip' was detected."))

            # Test if the .zip is a valid zip file
            if zipfile.is_zipfile(self.filename):
                self.assertTrue(True, logger.passed("%s is a valid zip file" % self.filename))
                self.assertTrue(True, logger.info("Extracting .zip to obtain test.xml."))

                # Extract the .zip and pull out the test.xml.
                tempDirectory = tempfile.mkdtemp(suffix="", prefix="TEST_")
                with zipfile.ZipFile(self.filename) as zf:
                    zf.extractall(tempDirectory)
                    self.filename = tempDirectory + os.path.sep + "test.xml"
            else:
                self.assertTrue(False, logger.failed("%s is not a valid zip file" % self.filename))
        else:
            self.assertTrue(False, logger.failed("Invalid file detected.  A valid file has a .xml or .zip extension.  Extension must be lower-case.  test.xml is also a valid file"))
        # TODO: Remove the temp directory after complete.
        return validate.run(self.filename) == False

if __name__ == "__main__":
    validateTest = ValidateTest()
    sys.exit(validateTest.main())
正如您在init函数中看到的,我为self.filename分配args变量的值。稍后在main函数中,我检测到一个zip文件,然后设置self.filename=新文件路径和名称。但是,正如您将在下面看到的,我从另一个类调用这个self.filename变量,并获得从args分配的原始值。见下文:

class Tests(Parameterize.ParametrizedTestCase):
    def test_validateIrCode(self, ircode):
        driver = ElementTree.parse(Main.ValidateTest().filename)
文件名的值是c:\test.zip,而不是提取的文件。。。比如,c:\temp\test.xml


如果你们中有人能提供一些明确的例子,我将不胜感激。我尝试过使用全局变量并将变量作为参数传递,但我显然犯了一些错误,因为我得到了语法错误或相同的结果。

您的第二行代码(
ValidateTest()
)不需要参数吗?它在没有参数的情况下运行。你建议我通过什么论点?你有一个例子吗?