Python 限制内部使用方法调用方

Python 限制内部使用方法调用方,python,python-2.7,oop,methods,Python,Python 2.7,Oop,Methods,假设我有一个类任务和另一个类子任务,特定任务的执行被委托给该类,但总是在任务执行的上下文中。这意味着子任务始终执行任务,并对任务的属性执行操作: 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:
    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
但是我们实际上想从
子任务调用此方法来执行这些更新:

class Subtask:
    def run(self):
        # do stuff
        self.task._update()
问题是:这是一种不正常的行为。不应从另一个上下文调用仅限内部使用的方法,IDE会按预期发出相应的警告

但是,我不想公开该方法,
Task.update()
,因为它的使用仍然受到限制。我们只想做一些类似C++中的友情。< /P> 我们希望将该
任务保持为私有。_update()

有没有办法做到这一点


PS:我知道Python是如何工作的,我知道我可以从外部使用该方法,忽略警告,或者将其公开,只是不在其他地方使用,总结一下:负责任,正如Python的座右铭所宣称的那样。我同意这一点,但我也想知道是否有任何方法可以实现我所追求的目标,使之符合Python的理念。

我认为最具Python风格的解决方案是使用私有变量,因为如果你是显式的,它们可以在任何地方访问

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

前导下划线并不意味着类私有。这是你想要的隐私。将其视为模块私有或我的库私有通常比在类行上绘制边界更有意义。如何将方法模块或库私有化?@LiamBohl:您不会将其私有化。你只是那样对待它。前导下划线通常表示这样命名的对象是一个实现细节,但这并不意味着对该实现细节的所有访问都应该发生在同一个类中。见鬼,主要的下划线约定并不局限于发生在类中;例如,以前导下划线命名的模块级函数也应视为实现细节。