如何定义一个Python方法,我只想在初始化方法中使用,也就是说,不能从类定义之外访问它?

2024-04-19 14:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个类定义,它接受一些参数并用它创建附加数据,所有这些都在__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

我只想在创建类的实例时运行generate_bar()方法一次,因此该方法在实例上是不可调用的。有没有一种更简洁的方法来确保一个方法只对__init__可用,或者我只需要假设任何看过我的代码的人都会明白,在任何情况下,对类的实例调用generate_bar()都是不合适的?你知道吗


Tags: 数据实例方法代码self参数return定义
2条回答

如果不使用任何实例状态,只需将其作为单独的函数:

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)

根据惯例,前导下划线表示它是一个内部函数,不能由模块的外部使用者使用。你知道吗

您可以将函数嵌套在__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()

这里generate_bar()甚至不需要参数,它可以从封闭范围访问xyz。你知道吗

对于“隐藏”函数,通常使用一个下划线来表示您的意图:

def _generate_bar(self, x, y, z): ...

它们仍然可以访问,但无法通过制表符完成显示。你知道吗

看到这个了吗

class foo:
    def __init__(self):
        self.response = self._bar()
    def _bar(self):
        return "bar"

f = foo()
>>> f.response
bar

您可以通过tab completion验证对象看不到函数栏

相关问题 更多 >