限制内部使用方法来电者

时间:2017-06-29 22:05:41

标签: python python-2.7 oop methods

假设我有一个类Task和另一个类Subtask,委派特定任务的执行但总是在Task执行的上下文中。这意味着Subtask总是需要Task,并且会对Tasks的属性执行操作:

class Task:
    pass

class Subtask:
    def __init__(self, task):
        self.task = task

    def run(self):
        # performs actions on self.task own attributes

然后我们在Task中有一个方法进行特定更新。该方法仅供内部使用:

class Task:
    def _update(self):
        # do something restricted

但是我们实际上想要从Subtask调用此方法来执行这些更新:

class Subtask:
    def run(self):
        # do stuff
        self.task._update()

问题在于:这是一种不正常的行为。不应该从另一个上下文调用仅内部使用方法,并且IDE会按预期提供相应的警告。

但是,我不想让方法 public Task.update(),因为它仍然受限制使用。我们只想做类似于C ++中的友谊。

我们希望保留Task._update()方法私有,但为Subclass类授予特殊权限。

有没有办法做到这一点?

PS:我知道Python是如何工作的,我知道我可以从外部使用该方法并忽略警告,或者将其设为 public ,而不是在其他地方使用它,总结一下:<强烈的>负责任的,因为它是Python宣称的座右铭。我同意这一点,但我也想知道是否有任何方法可以用Python理念来实现我所追求的目标。

1 个答案:

答案 0 :(得分:0)

我认为最Pythonic的解决方案是使用私有变量,因为如果你是明确的话,它们可以在任何地方访问。

class Task:
    def __update(self): # Two underscores for private
        # do something restricted

class Subtask:
    def __init__(self, task):
        self.task = task

    def run(self):
        # Do stuff
        self.task._Task__update() # Access private method