假设我有一个类定义,它接受一些参数并用它创建额外的数据,所有这些都在__init__方法中:
class Foo():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
self.bar = generate_bar(x, y, z)
def generate_bar(self, x, y, z):
return x+y+z
Run Code Online (Sandbox Code Playgroud)
我只想在generate_bar()创建类的实例时运行该方法一次,因此该方法在实例上可调用是没有意义的.是否有更简洁的方法来确保方法仅可用__init__,或者我只需要假设任何查看我的代码的人都会理解,从来没有一种情况可以在一个实例上调用generate_bar().班级?
如果您没有使用任何实例状态,只需将其作为单独的函数:
def _generate_bar(x, y, z):
return x + y + z
class Foo():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
self.bar = _generate_bar(x, y, z)
Run Code Online (Sandbox Code Playgroud)
按照惯例,前导下划线表示它是一个内部功能,不会被模块的外部使用者使用.
您可以将函数嵌套在其中,__init__但这对可读性没有任何帮助:
class Foo():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def generate_bar():
return x + y + z
self.bar = generate_bar()
Run Code Online (Sandbox Code Playgroud)
这里generate_bar()甚至不需要参数,它可以访问x,y并z从封闭的范围.