差异

2014-02-12 94 views
0

下面的代码是我在得到一个GUI应用程序来更新原有的企图其字体等,,当用户在config.ini文件设置改变了它:差异

def on_config_change(self, config, section, key, value): 
    """ 
    sets font,size colour etc.. 
    when user changes in settings. 
    """ 
    if config is self.config: 
    token = (section, key) 
    if token == ('Font', 'button_font'): 
     print('Our button font has been changed to', value) 
     GetInformation().lay_button.font_size = str(value) 
     GetInformation().bet_button.font_size = str(value) 


def build(self): 
    self.config.write() 
    return GetInformation() 

我的代码更新了配置,但屏幕从未更新,无需重新启动应用程序。

下面的代码工作:

def on_config_change(self, config, section, key, value): 
    """ 
    sets font,size colour etc.. 
    when user changes in settings. 
    """ 

    if config is self.config: 
     token = (section, key) 
     if token == ('Font', 'button_font'): 
      print('Our button font has been changed to', value) 
      self.getInformation.lay_button.font_size = str(value) 
      self.getInformation.bet_button.font_size = str(value) 


def build(self): 
    self.config.write() 
    self.getInformation = GetInformation() 
    return self.getInformation 

是什么调用GetInformation()lay_button.font_size 和self.getInformation.lay_button.font_size之间的区别?

回答

1

除非您设计专门的代码(通常是辛格尔顿模式),Class().method()创建从Class实例化一个新的对象,并对其方法调用method由于没有指定接收变量,因此对象被销毁

self.object.method()另一方面在现有对象self.object上调用方法method。这个对象是持久的,因为它被保存为顶级类的成员(self)。

在你的第一个例子中,你实际上在三个不同的对象上调用不同的方法。在方法on_config_change中,两个对象立即销毁。在第二个示例中,所有调用都应用于同一个对象,然后保留其修改后的属性。

+0

谢谢,让我感到困惑的是在使用self.getInformation = GetInformation()之前使用self.getInformation。 –

+0

在函数的情况下,语句的执行顺序与其在文件中的位置不相关。这个代码当然只适用于在'on_config_change'之前调用'build'函数。如果不是这种情况,你最终会得到'AttributeError',因为'self.getInformation'不存在。 – Cilyan

1

设置GetInformation().lay_button.font_size改变lay_button的字体大小,您刚刚创建,并没有挂接到任何一个全新GetInformation

设置self.getInformation.lay_button.font_size更改lay_button的字体大小为GetInformationon_config_change开火。它的GetInformation这是你的系统,因此它是你需要做的工作。

+0

谢谢,这使得它更清晰。 –