【发布时间】:2018-04-25 21:39:06
【问题描述】:
我有一个需要实现方法 meth() 的 A 类。 现在,我不希望我的包的最终用户调用此方法。因此,我必须将此方法设为私有(即 _meth()。我知道它不是真正私有的,但约定很重要。)
但问题是我的包中还有另一个 B 类,它必须调用该方法 _meth()。问题是我现在得到一个警告方法,说 B 试图访问一个类的受保护方法。因此,我必须公开该方法,即没有前导下划线。这与我的意图相矛盾。
解决这个困境最pythonic的方法是什么?
-
我知道我可以在 A 之外重新实现该方法,但它会导致代码重复,并且由于 meth() 使用 A 的私有属性,会导致同样的问题。
从单个元类继承不是一种选择,因为这些类具有完全不同的目的,这将导致一团糟。
【问题讨论】:
-
是否可以创建 A 类的对象或将其传递给 B 类?
-
也许你会在编辑器中收到警告,但无论如何你都可以调用该方法。
-
@Matthias 当然可以,但我希望我的脚本尽可能接近 PEP,并且不显示任何警告。
-
@VPfB 是的,但这仍然是非pythonic - 一个不打算调用的公共方法。
-
@tobias_k 不,问题是如何以 Python 的方式进行操作,而不是如何禁用 IDE 警告。
标签: python python-3.x private-members