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

导入还是不导入ClassMethod?

  •  5
  • fabio  · 技术社区  · 7 年前

    我希望这不是一个愚蠢的问题,但我找到了一些代码,它们是从哪里导入的 classmethod 还有一些没有的代码,所以有区别吗?

    我使用的是python 3.6,但我认为最初的代码是针对python 2.7的(它使用 from __builtin__ import )

    import unittest
    from selenium import webdriver
    from builtins import classmethod #original code was from __builtin__ import classmethod 
    
    
    class HomePageTest(unittest.TestCase):
        @classmethod
        def setUp(cls):
            # create a new Firefox session
            cls.driver = webdriver.Firefox()
            cls.driver.implicitly_wait(30)
            cls.driver.maximize_window()
    
            # navigate to the application home page
            cls.driver.get("http://demo-store.seleniumacademy.com/")
    
        def test_search_field(self):
            pass
    
        #My tests without @classmethod
    
        @classmethod
        def tearDown(cls):
            # close the browser window
            cls.driver.quit()
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)
    
    2 回复  |  直到 7 年前
        1
  •  4
  •   MSeifert    7 年前

    通常只导入 builtins __builtin__ 如果您的代码中还有一个与内置名称相同的变量,并且还希望访问内置名称。模块的文档解释得很好:

    builtins — Built-in objects

    这个模块提供了对所有python内置标识符的直接访问;例如, builtins.open 是内置函数的全名 open() . 见 Built-in Functions Built-in Constants 文件。

    大多数应用程序通常不显式访问此模块,但在提供与内置值同名的对象的模块中可以使用此模块,但在该模块中也需要该名称的内置。例如,在希望实现 打开() 包装内置功能 打开() ,此模块可直接使用:

    import builtins
    
    def open(path):
        f = builtins.open(path, 'r')
        return UpperCaser(f)
    
    class UpperCaser:
        '''Wrapper around a file that converts output to upper-case.'''
    
        def __init__(self, f):
            self._f = f
    
        def read(self, count=-1):
            return self._f.read(count).upper()
    

    但在你的情况下,似乎没有 classmethod 文件中的定义,因此您实际上不需要 from builtins import classmethod .

        2
  •  -1
  •   iBug    7 年前

    在python 3中,不需要导入 builtins 模块,或者里面的任何东西。当查找当前作用域中的名称失败时, 建筑材料 被看作是一种倒退。

    如果需要维护代码完整性,请考虑在此之前显式检查Python版本。

    import sys
    if sys.version_info[0] == 2:
        from __builtin__ import classmethod
    
    推荐文章