是否可以将公共方法私有化为子类?我不希望其他扩展该类的类能够调用某些方法。这是一个例子:
class A: def __init__(self): #do something here def method(self): #some code here class B(A): def __init__(self): A.__init__(self) #additional initialization goes here def method(self): #this overrides the method ( and possibly make it private here )
从现在开始,我不希望任何从B扩展的类都可以调用method。这可能吗?
method
编辑:这样做的“逻辑”原因是我不希望用户以错误的顺序调用方法。
Python作为源分发。私有方法的想法毫无意义。
想要扩展的程序员(B由于隐私问题而感到沮丧)会查看B源代码,然后将源代码复制并粘贴method到子类中C。
B
C
您通过“隐私权”获得了什么?您最好的期望是挫败您的潜在客户进行复制和粘贴。
最糟糕的是,他们因为无法扩展而丢弃了您的包裹。
是的,所有开源都以一种或另一种方式扩展。您无法预见将要进行编码的所有内容和每种用途。当代码作为源分发时,很难防止将来使用。
编辑 “防白痴”代码。
首先,python 90%的时间作为源分发。因此,任何下载,安装然后拒绝阅读API指南并以无序方式调用方法的白痴仍然可以找出问题的出处。
我们有三类白痴。
您只能为他们提供剪切和粘贴的有效代码示例,以帮助他们。
您只能通过提供工作代码示例来帮助他们。即使这样,他们也会错误地剪切和粘贴它。
您可以为他们提供有效的代码示例,但是他们不喜欢您的API,因此会坚持重写它。他们会告诉您您的API是疯狂的,并且已经对其进行了改进。
您可以让这些人参与不断升级的“防白痴”军备竞赛。您放在一起的所有内容都会分解。
在这一点上,隐私为您做了什么?有些人会拒绝理解它。有些人对此感到困惑;有些人想解决它。
公众如何呢,并让您称呼“白痴”的人们从您的代码中学习?