如何在Python中将变量信息从一个类传递到另一个类
在Python中如何将变量信息从一个类传递到另一个类上,我一直在苦苦挣扎。我正在创建一个程序,它根据扩展名或文件名检测文件类型。我最初将文件名设置为args的任何名称(目前为硬编码,但将使用argparse)。如果我检测到一个zip文件,那么我将提取zip并拉出test.xml,然后将该文件路径重新分配给变量。然而,当我从另一个类调用它时,我得到了旧的路径(从args分配)。我对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
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()
)不需要参数吗?它在没有参数的情况下运行。你建议我通过什么论点?你有一个例子吗?