Python - Расширить класс, используемый другим классом в пакете - PullRequest
0 голосов
/ 14 июля 2020

Я использую пакет, который определяет пару классов (A и B). Я хочу расширить класс A в моем main.py, включив в него var_d. Я пробовал следующее:

Файл: my_package.py

class A:
    def __init__(self):
        self.var_a = 'var_a'

class B:
    def __init__(self):
        self.var_b = A()
        self.var_c = A()

Файл: main.py

from my_package import *

a = B()
a.var_b.var_d = 'extending class A to have this new var'

Это не работает. Какое альтернативное решение?

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Вы должны использовать "setattr"

class A:
    def __init__(self):
        self.var_a = 'var_a'

class B:
    def __init__(self):
        self.var_b = A()
        self.var_c = A()
a = B()
setattr(a.var_b, 'var_d', 1)

ведет к

print(a.var_b.var_d)
>> 1
0 голосов
/ 14 июля 2020

В вашем class A self.var_a не присвоено значение. Переменные в python автоматически существуют в первой области, которой они назначены. В вашем текущем коде self.var_a не было присвоено. Например, если вы выполняете self.var_a = '', он должен работать.

update: Я могу запутаться в том, о чем вы спрашиваете. Ваш код ошибки жалуется на 'var_a', это мой ответ.

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