如何在Python中引用作为对象的实例变量?

时间:2018-06-19 02:34:29

标签: python

通常,要引用实例变量,变量名必须以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?如果是这样,这是正确的惯例吗?

1 个答案:

答案 0 :(得分:0)

  

如果是的话,这是正确的约定吗?

在两种情况下,设计可能遭受tight coupling的损害。一般的经验法则是始终依赖抽象,而不依赖具体。
仅当您与我们共享实际代码(MCVE)并提供一些上下文信息后,我们才能为您的问题提供实用,更好的解决方案。