通过类的全局变量?

时间:2015-07-01 05:55:22

标签: python python-3.x

我正在尝试使用全局变量调用类的方法,但我的逻辑似乎有问题。

在下面的代码中,A调用B,调用调用C方法的B

x = None

class A():

    def __init__(self):

        global x
        x = B()

class B():

    def __init__(self):

        C()

    def bla(self):

        print('bla')

class C():

    def __init__(self):

        global x
        x.bla()

A()

我得到的错误:

AttributeError: 'NoneType' object has no attribute 'bla'

我错过了什么?

3 个答案:

答案 0 :(得分:6)

执行 gridlines: { color: 'none' } 后,调用x = B()的结果无法分配到B(),直到 x完成初始化后的。但是在创建B实例时会调用B,并立即调用B.__init__()。换句话说,当你执行C()时,事情按此顺序发生:

  1. 致电x = B()
  2. 致电B.__init__()(由于C.__init__()中的C()
  3. B.__init__()的结果分配给B()
  4. 但是第3步永远不会发生,因为x会引发错误,因为第3步尚未发生,因此尚未将对象分配给C.__init__()

    目前尚不清楚您在此处尝试完成的任务,因此很难说如何最好地更改代码。 x无法使用在C.__init__完成运行之后才会定义的变量。

答案 1 :(得分:0)

这是你的问题

你说     x = b() 好吧,在b完成初始化之前,x是无...这也意味着直到c完成初始化,否则会导致C类出现问题

x.bla()

答案 2 :(得分:0)

这是因为在完成为每个类调用init函数之前,x尚未完全初始化。在这里,您尝试在完成初始化之前访问全局x。