Импортировать или нет импортировать метод класса? - PullRequest
0 голосов
/ 21 января 2019

Надеюсь, это не глупый вопрос, но я нашел какой-то код, куда они импортировали 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 ]

0 голосов
/ 21 января 2019

Обычно вы импортируете builtins или __builtin__ только в том случае, если в вашем коде есть переменная с тем же именем, что и для встроенного элемента, и вы также хотите получить доступ к встроенному имени.Документация модуля объясняет это довольно хорошо:

встроенные - встроенные объекты

Этот модуль обеспечивает прямой доступ ко всем «встроенным» идентификаторамPython;например, builtins.open - полное имя встроенной функции open().См. Встроенные функции и Встроенные константы для документации.

Обычно этот модуль не доступен явно в большинстве приложений, но может быть полезен в модулях, которые предоставляютобъекты с тем же именем, что и встроенное значение, но для которых также требуется встроенное имя.Например, в модуле, который хочет реализовать функцию open(), которая включает встроенный 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 определением в файле, поэтому вам на самом деле не нужно from builtins import classmethod.

0 голосов
/ 21 января 2019

В Python 3 нет необходимости импортировать модуль builtins или что-либо внутри него. Когда поиск имени в текущей области завершается неудачно, builtins рассматривается как запасной вариант.

Если вам необходимо сохранить целостность кода, рассмотрите возможность явной проверки версии Python перед этим.

import sys
if sys.version_info[0] == 2:
    from __builtin__ import classmethod
...