我记得有一种语法可以使一个类的函数只能由该类调用,而不是由任何继承该类函数的子类,但我不记得究竟它是什么和谷歌对我没有任何帮助。谁能提醒我怎么做呢?
答案 0 :(得分:5)
您无法强制执行隐私,但starting a method name with double underscores是惯用的Python方式,表明子类不应使用该方法。
答案 1 :(得分:2)
这有效,但我认为这有点反模式:
class A:
def f(self):
if type(self) != A:
raise NotImplementedError('Thou shalt not invoke this here method.')
print('good')
class B(A): pass
A().f()
B().f()
但实际上,请不要使用它。用隐含的名字争吵坚持正常的下划线和dunder表示法。我们都是这里的成年人。特别是因为我的方法可以很容易地从外部打破:
type_ = type
type = lambda x: A
B().f()
type = type_
答案 2 :(得分:0)
我知道,这不是你问题的答案,但你应该考虑重新思考你的对象结构,因为你违反了面向对象编程的共同原则。