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