Назначение атрибутов класса Python - PullRequest
0 голосов
/ 06 сентября 2018

Я новичок в Python, и мне было интересно, почему я не могу изменить атрибут для экземпляра класса с помощью функции, если я передаю экземпляр в качестве параметра функции Например, если бы я имел:

class sol:
    def __init__(self):
        self.val = 0

def fun1(obj, attrib):
    obj[attrib] = 1

newSol = sol()

fun1(newSol, "val")

Почему fun1 не может изменить атрибут объекта? Есть ли способ изменить его, или атрибут "val" неизменен?

1 Ответ

0 голосов
/ 06 сентября 2018

экземпляры класса Python и dict - совершенно разные звери; вы, вероятно, пришли из фона JavaScript, где obj.foo эквивалентно obj["foo"], но Python работает не так.

Если вы хотите установить атрибут через имя str, используйте setattr:

def fun1(obj, attrib):
    setattr(obj, attrib, 1)
...