7

我正在编写一个在其__init__函数中使用某些函数的类,但我不确定在哪里定义这些函数的最佳实践。我通常喜欢先定义__init__,但如果我需要在其中使用函数/方法,__init__则需要先定义它。我不想在类外将它定义为它在类外无用,但在__init__. 什么是正常的约定?

4

4 回答 4

14

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

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

    def hi(self):
        print "Hi!"

完全没有问题。

虽然Python 样式指南IIRC 中没有提到它,但约定 let__init__是类中的第一个方法。

于 2012-08-21T11:41:33.237 回答
3

正常的约定确实是放在__init__其他方法之前。这样做的原因是函数在被调用之前不会被评估。来自Python 文档

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

函数定义不执行函数体;this 仅在调用函数时执行。

于 2012-08-21T11:49:20.840 回答
1

最好将__init__函数定义为第一个函数,您可以__init__在其中调用定义的函数。

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

    def x(self):
        return 10
于 2012-08-21T11:41:46.810 回答
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已经定义...

于 2012-08-21T11:56:41.273 回答