假设我有一个类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理念来实现我所追求的目标。答案 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