Class()。property和self.class.property之间的区别

时间:2014-02-12 22:31:19

标签: python class

以下代码是我最初尝试获取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?

2 个答案:

答案 0 :(得分:1)

设置GetInformation().lay_button.font_size会更改您刚刚创建的全新 lay_button的{​​{1}}字体大小,并且不会挂钩。

设置GetInformation会更改self.getInformation.lay_button.font_size触发的当前lay_button的{​​{1}}字体大小。 GetInformation已挂钩到您的系统中,因此on_config_change需要您完成工作。

答案 1 :(得分:1)

除非您专门设计代码(通常是 Singleton 模式),否则Class().method()会创建一个从Class实例化的新对象,并在其上调用方法method然后销毁该对象,因为没有指定接收变量。

另一方面,

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

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