我应该在哪里定义我在__init__中使用的函数

时间:2012-08-21 11:37:48

标签: python function

我正在编写一个在__init__函数中使用某些函数的类,我不确定在哪里定义这些函数的最佳实践。我通常喜欢先定义__init__,但如果我需要在__init__中使用a函数/方法,则需要先定义它。我不想在课外定义它,因为它在课外无用,但在__init__之前定义方法对我来说似乎很麻烦。对此有哪些正常约定?

4 个答案:

答案 0 :(得分:12)

只需像每个其他方法一样将方法添加到您的类中

class Test(object):
    def __init__(self):
        self.hi()

    def hi(self):
        print "Hi!"

完全没问题。

虽然在Python Style Guide IIRC中未提及,但__init__成为班上第一种方法是惯例。

答案 1 :(得分:3)

通常的惯例是将__init__置于其他方法之前。这样做的原因是函数在被调用之前不会被评估。来自Python docs

  

函数定义是可执行语句。它的执行将当前本地命名空间中的函数名称绑定到一个函数对象(该函数的可执行代码的包装器)。此函数对象包含对当前全局命名空间的引用,作为调用函数时使用的全局命名空间。

     

函数定义不执行函数体;只有在调用函数时才会执行此操作。

答案 2 :(得分:1)

最好将__init__函数定义为第一个函数,并且可以调用其中__init__之后定义的函数。

class A:
    def __init__(self):
        print self.x()

    def x(self):
        return 10

答案 3 :(得分:0)

为什么在init之后定义方法会“混乱”?想一想:

定义时

class MyClass(object):

    def __init__(self):
        self.something = whatever
        self.do_something_else()

    def do_something_else(self):
        ...

__init__MyClass课程的一种方法,就像do_something一样;它只是在创建MyClass实例时将调用的类的第一个方法。因此,将__init__放在首位不仅是习惯性的,而且也是合乎逻辑的。

您的do_something_else方法不必先定义,因为您在__init__中使用它。从MyClass的角度来看,这是另一种方法。在您创建myclass=MyClass()个实例时,do_something_else已经定义了......