Пример правилнього использования:
В конфтесте пайтеста мы в хуке 
def pytest_itemcollected(item):
добавляем к тесткейсу поле 
setattr(item, "extended_description", "Special text for reporting" )
Затем его использует какой то внешний код, например в
def pytest_runtest_makereport(item, call):
В этом случае оригинальное поведение объекта никак не аффектится, вполне легальное действие.
А вот за
class Example:
    def 
init(self):
        ...    
    def calculate(self):
        return 
self.data    cl = Example
setattr(cl, "data", "Text")
cl.calculate()
обычно больно бьют, так как неявная логика во всей красе