我希望这不是一个愚蠢的问题,但是我在他们导入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)
答案 0 :(得分:4)
通常,如果您的代码中还具有与内置名称相同的变量,并且也想访问内置名称,则仅导入builtins
或__builtin__
。该模块的文档对此进行了很好的解释:
builtins — Built-in objects
此模块可直接访问Python的所有“内置”标识符;例如,
builtins.open
是内置函数open()
的全名。有关文档,请参见Built-in Functions和Built-in Constants。大多数应用程序通常不显式访问此模块,但是在提供与内置值同名的对象的模块中很有用,但其中也需要该名称的内置项。例如,在要实现包装内置
open()
的{{1}}函数的模块中,可以直接使用以下模块:open()
但是,在您的情况下,文件中似乎没有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
。
答案 1 :(得分:-1)
在Python 3中,无需导入builtins
模块或其内部的任何内容。如果在当前范围内查找名称失败,则会将builtins
查找为后备。
如果需要维护代码完整性,请考虑在此之前显式检查Python版本。
import sys
if sys.version_info[0] == 2:
from __builtin__ import classmethod