通常,要引用实例变量,变量名必须以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
中的self.b = b
明确声明__init__
为实例变量,之后将b
称为self.b
?如果是这样,这是正确的惯例吗?
答案 0 :(得分:0)
如果是的话,这是正确的约定吗?
在两种情况下,设计可能遭受tight coupling的损害。一般的经验法则是始终依赖抽象,而不依赖具体。
仅当您与我们共享实际代码(MCVE)并提供一些上下文信息后,我们才能为您的问题提供实用,更好的解决方案。