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:您不会将其私有化。你只是那样对待它。前导下划线通常表示这样命名的对象是一个实现细节,但这并不意味着对该实现细节的所有访问都应该发生在同一个类中。见鬼,主要的下划线约定并不局限于发生在类中;例如,以前导下划线命名的模块级函数也应视为实现细节。