是否有在python中初始化类时使用self的约定?

时间:2019-07-19 22:45:45

标签: python

我很好奇python中是否有在类的__init__方法中使用自变量的约定。

考虑简单的Person类。

class Person:

    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname

        self.fullname = ' '.join([self.firstname, self.lastname])

__init__方法将两个输入firstnamelastname存储为实例变量,然后使用这些实例变量来定义fullname实例变量。

在定义self时似乎不需要self.fullname变量,因此Person可以写成:

class Person:

    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname

        self.fullname = ' '.join([firstname, lastname])

这两种编写类的方式之间是否存在有意义的区别?除了第二个选项需要较少的水平空间来定义self.fullname以外,我没有看到其他区别。

1 个答案:

答案 0 :(得分:1)

第二个示例是一种写相同代码的(非常稍微)有效的方法。

通常,实例的方法使用实例变量来维护实例的状态。由于每种方法与self都具有相同的对象,因此不同的方法可以随着时间的推移通过使用进行通信。

在两个示例中,firstnamelastname都是所谓的“局部变量”,其生存期仅是绑定它们的方法的生存期。因为可以更快地查找它们(由于我们不需要介绍的原因)并且更容易键入它们,所以它们通常是生命周期有限的值的首选。