Python

如何使用兼容python2和python3版本的六模組遷移程式碼

  • November 19, 2020

我想提供六個來兼容我在 python2 和 python3 版本中的程式碼。我從網上得到了這個例子,但沒有得到更多的資源來得到網上的六個例子。在下面的程式碼中,我不明白為什麼他們為測試案例創建了類並寫了這一行

class SampleTests(unittest.TestCase):

在 main 裡面,他們是怎麼稱呼這個班級的SampleTests?以及如何unittest.main()在 main 內部呼叫類?

請幫助我。如果可能的話,請給出一些六個模組遷移的範例。

import six
from six.moves import reduce
import unittest


def multiply_values(val1, val2):
   return val1*val2

def add_values(val1, val2):
   return val1+val2

class SampleTests(unittest.TestCase):    
   def test_sets_equal(self):
       setValue1 = reduce(multiply_values, [1,2])
       setValue2 = reduce(add_values, [1,2])
       six.assertCountEqual(self, [2,3], [setValue1,setValue2])
   
if __name__ == '__main__':
   unittest.main()

在您的範例six中用於兩件事:

  • reduce在 Python 3 中被刪除並替換為functools.reducesosix為它提供了一個方便的“別名”,因此您可以同時呼叫reduce2 和 3。
  • assertCountEqual是 Python 3 中 unittest 的一部分,所以six這裡提供了它自己的 Python 2 實現。

six模組的最佳文件可在此處獲得:https ://six.readthedocs.io/

注意:Python 2 現在已棄用,您不應該將它用於新項目。six將幫助您編寫適用於兩個版本的 Python 的程式碼,但如果您沒有充分的理由支持 Python 2,最好編寫僅 Python 3 的程式碼。2to3 工具可以幫助您將 Python 2 程式碼轉換為 Python 3。

為什麼他們為測試案例創建類並編寫了這一行 class SampleTests(unittest.TestCase): 和 Inside main,他們如何呼叫類 SampleTests

這不是真正six的具體問題,這是unittest模組在 Python 2 和 3 上的工作方式,有關詳細資訊,請參閱https://docs.python.org/3/library/unittest.html

TL;DR 版本:unittest.main()將自動執行文件中的所有測試案例,並且測試案例被定義為test_在類中名稱以開頭的函式unittest.TestCase

引用自:https://unix.stackexchange.com/questions/620405