Как я могу переопределить значение параметра объекта в Python? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь изменить данное значение, когда создаю экземпляр объекта в Python. Аргументами являются 2 списка (list_A и list_B), которые появляются в GUI. Я могу манипулировать значением list_A, все значения имеют логический тип. Я хочу, чтобы list_B показывал некоторые значения, но зависел от значений list_A. Например, если первое значение list_A равно true, то покажите одну половину list_B, если второе - true, тогда покажите вторую половину list_B, а если оба значения имеют значение true, покажите весь список. Но мне нужно сначала полностью создать экземпляр объекта, чтобы прочитать значения list_A, а затем изменить list_B.

У меня нет доступа к классу, поэтому я не могу изменить рабочий процесс, Мне нужно сделать это следующим образом.

instance_var = foo( list_A, list_B ) # this is how I instantiate the object

Так что я не знаю, смогу ли я после создания экземпляра получить доступ и изменить list_B.

Спасибо

1 Ответ

0 голосов
/ 18 января 2020

В Python, в момент создания объекта и установки любого атрибута, вы можете получить к нему доступ __dict__, поэтому, когда вы установили class, вы установили два атрибута, чтобы они сохранялись в __dict__ Это означает, что вы можете легко получить к ним доступ, изменить их и так далее через __dict__.

Позвольте мне показать вам пример, посмотрите:

class MyClass:

    def __init__(self, list_a, list_b):
        self.list_a = list_a
        self.list_b = list_b

    def print_list_b(self):
        print(f'list_b = {self.list_b}')


if __name__ == "__main__":

    list_a = [1, 2, 3] 
    list_b = ["a", "b", "c"]

    p1 = MyClass(list_a,list_b)
    p1.print_list_b()     #Output: list_b = ['a', 'b', 'c']

    print(p1.__dict__)    #Output: {'list_a': [1, 2, 3], 'list_b': ['a', 'b', 'c']}
    attr_list_b = p1.__dict__['list_b'] #Getting list_b
    print(attr_list_b)                  #Output: ['a', 'b', 'c']                 

    attr_list_b[2] = "X"    #Modifying list_b
    print(attr_list_b)      #Output: ['a', 'b', 'X']

    p1.print_list_b()       #Output: list_a = ['a', 'b', 'X']

Как вы можете видеть, мы можно легко изменить поведение наших классов с помощью __dict__.

. Для лучшего понимания __dict__ я предлагаю вам прочитать об этом в этом ответе здесь .

ПРИМЕЧАНИЕ: ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ВСЕ СЛОВАРНЫЕ МЕТОДЫ ЧЕРЕЗ __dict__, ПОТОМУ ЧТО ЭТО СЛОВАРЬ.

Может помочь вам, пока!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...