Как ссылаться на объект в классе с помощью декоратора

У меня есть список dicts, определенных в setUpClass в Django TestCase:

class MyTest(TestCase):

    @classmethod
    def setUpClass(cls):

        myobj = MyModel.objects.create()

        MY_LIST = [ 
            ({ 'key1': {'a': myobj.id, 'b': 2}},),
            ({ 'key2': {'a': myobj.id, 'b': 2}},), 
        ]

Как ссылаться на MY_LIST, используя параметризованный? Например,

@parameterized.expand(MyTest().setUpClass().MYLIST):
def test_mytest(self, dict_item):
    print(dict_item.items())

Результаты в AttributeError: 'NoneType' object has no attribute 'MYLIST'.

Вы можете это сделать. В вашем случае:

class MyTest(TestCase):

    @classmethod
    def setUpClass(cls):
        ... # your staff
        cls.MY_LIST = [...]
        super().setUpClass()
        return cls

Использовать в тестах:

@parameterized.expand(MyTest.setUpClass().MYLIST):
def test_mytest(self, dict_item):
    ... # your test staff

Не забывайте, classmethod вы можете вызывать с помощью класса. Вам не нужен экземпляр.

Думаю, проблема в том, что вы вызываете setUpClass для добавления свойства MY_LIST, но setUpClass ничего не возвращает. Поэтому вы можете поступить следующим образом:

MyTest.setUpClass()
@parameterized.expand(MyTest.MYLIST):
def test_mytest(self, dict_item):
    ... # your test staff

или:

class MyTest(TestCase):

    @classmethod
    def setUpClass(cls):

        myobj = MyModel.objects.create()

        cls.MY_LIST = [ 
            ({ 'key1': {'a': myobj.id, 'b': 2}},),
            ({ 'key2': {'a': myobj.id, 'b': 2}},), 
        ]
        return cls

@parameterized.expand(MyTest().setUpClass().MYLIST):
def test_mytest(self, dict_item):
    print(dict_item.items())

Вернуться на верх