У меня проблема решена, но я хотел бы знать, почему.Динамически изменяющие атрибуты экземпляра
Моя ситуация выглядит следующим образом:
Я определил класс Vector как:
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
И следующий экземпляр, созданный:
v1 = Vector(1,1)
Почему следующий код не работает
def plus_one_A(thing):
attrs = vars(thing)
for attr_name, value in attrs.items():
if type(value) == int or type(value) == float:
eval('thing.'+ attr_name + ' += 1')
return thing
v2 = plus_one_A(v1)
thing.x += 1
^
SyntaxError: invalid syntax
Но следующее ли?
def plus_one_B(thing):
attrs = vars(thing)
for attr_name, value in attrs.items():
if type(value) == int or type(value) == float:
setattr(thing, attr_name, value + 1)
return thing
v2 = plus_one_B(v1)
Не предполагается, что эти коды эквивалентны?
Эй, отличный ответ !. Это было то, чего мне не хватало, теперь я знаю разницу между 'exec()' и 'eval()' (я думал, что они одинаковые, но я должен был предположить, что в Python 'должен быть один - и желательно только один - простой способ сделать это). Большой совет о 'isinstance()' BTW – llekn