Как можно что-то добавить к атрибуту? - PullRequest
1 голос
/ 19 октября 2019

Как что-то можно изменить или добавить в класс?

Например, что в следующем коде означает, что lol может изменить a, который я использовал в __init__? Это вообще возможно? Если так, как я могу это сделать?

class Bla:
    def __init__(self, a):
        self.a = a

    def lol(self):

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Я не уверен, как Bla.lol () может изменить аргумент a, который ему передается, но он может изменить атрибут Bla.a или self.a как на него ссылаются изнутри объекта, который изначально имеет присвоенное ему значение аргумента a.

Мы можем заставить функцию lol присвоить новое значение атрибуту a,в этом случае я предполагаю, что a является строкой, и расширяю строку фразой ' has been altered':

>>> class Bla:
...     def __init__(self, a):
...         self.a = a
... 
...     def lol(self):
...         self.a += ' has been altered'
...         
>>> instance = Bla('the arg a')
>>> instance.a  # check a
'the arg a'
>>> instance.lol()  # modifies a
>>> instance.a  # check a again
'the arg a has been altered'
>>> instance.lol()  # we can alter it again, as many times as we run the function
>>> instance.a  # and see it has been altered a second time
'the arg a has been altered has been altered'
0 голосов
/ 21 октября 2019

Вы уже успешно добавляете / модифицируете экземпляр класса. А именно, __init__ принимает некоторые значения a, а добавляет в качестве атрибута .a к экземпляру self. Использование одного и того же имени для переменной и атрибута является случайным - вы также можете использовать разные имена:

class Bla:
    def __init__(self, b):
        self.a = b  # add `b` as attribute `a`

После добавления атрибута в экземпляр этот атрибут по умолчанию можно свободно читать и переопределять. Это относится к начальному методу, другим методам и любым другим функциям / методам, имеющим доступ к экземпляру.

class Bla:
    def __init__(self, b):
        self.a = b  # add `b` as attribute `a`

    def lol(self, c):
        self.a = c  # add `c` as attribute `a` (discarding previous values)

    def rofl(self, d):
        self.a += d  # re-assign `self.a + d` as attribute `a`

# external function modifying `Bla` instance
def jk(bla, e):
    bla.a = e  # add `e` as attribute `a` (discarding previous values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...