Как установить атрибут в другом методе

РЕДАКТИРОВАТЬ * Кажется, я вводил людей в заблуждение с некоторыми непреднамеренными словами. Я думал, что все функции при создании экземпляров методов содержат атрибуты. Но я действительно просто хотел проверить переменную в функции из класса 2.

Я очень плохо знаком с питоном и юнит-тестированием, поэтому, пожалуйста, прости меня, если то, что я спрашиваю, совершенно бредовое.

Я хотел знать, возможно ли "установить переменную в другой функции из внешней области видимости". Я продолжаю получать следующую ошибку:

Cannot modify Class2.py

Class1.py

from Class2.py import Class2
Class1(unittest.TestCase)
    def test_class2_fun(self):
        driver = Class2()
        driver.class2_fun

        assertTrue(driver.class2_fun.class2_variable) "???

Class2.py

Class2(self)
    def class2_fun(self):
        class2_variable = TRUE

Не уверен, как это сделать с правильным синтаксисом. Это возможно через декоратор, прежде чем назначить драйвер с Class2() или через патч как-нибудь?

2 ответа

В ваших определениях классов и функций есть несколько опечаток, но вы хотите использовать hasattr Функция скажет вам, если объект имеет определенный атрибут.

Если то, что вы хотите сделать, это проверить наличие local variable вне функции __init__ класса Class2 Я не думаю, что это возможно без изменения содержимого файла Class2.py,

Рабочий пример

В Class1.py

import unittest
from Class2 import Class2

class Class1(unittest.TestCase):

    def test_class2_at_exists(self):
        driver = Class2()
        self.assertTrue( hasattr( driver, 'class2_attribute' ) )

    def test_class2_at_value(self):
        driver = Class2()
        self.assertTrue( driver.class2_attribute == 'attribute value' )


if __name__ == '__main__':
    unittest.main()

В Class2.py

class Class2(object):
    def __init__(self):
        self.class2_attribute = 'attribute value'
        local_variable = True

По приглашению ipython,

>>> run Class1.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

Ваше утверждение должно быть вместо

   assertTrue(driver.class2_attribute)
Другие вопросы по тегам