Обычно, чтобы ссылаться на переменную экземпляра, имя переменной должно предшествовать self
, например,
class A:
def __init__(self, x: int):
self.x = x
def print_x(self):
print(self.x)
Однако я заметил, что если переменная экземпляра является объектом, это необязательно. То есть, я могу сделать,
class B:
pass
class A:
def __init__(self, b: B):
pass
def print_b(self):
print(b)
b = B()
a = A(b)
a.print_b()
и вызов print_b
из объекта A
будет печатать адрес памяти объекта B
без повышения ошибки.
Является ли это эквивалентом явного объявления b
как экземпляра variabe, через self.b = b
в __init__
и ссылаясь на b
как self.b
после этого? И если да, то это правильное соглашение?
И если да, то это правильное соглашение?
В обеих ситуациях конструкция может страдать от жесткой связи. Общее эмпирическое правило всегда зависит от абстракций, а не от конкреций.
Только если вы делитесь с нами фактическим кодом (MCVE) и предоставляете некоторый контекст, мы могли бы предложить практическое и лучшее решение вашей проблемы.