如何使一个函数可以被类使用,而不是由它在python中的子类

时间:2013-12-16 01:09:19

标签: python class

我记得有一种语法可以使一个类的函数只能由该类调用,而不是由任何继承该类函数的子类,但我不记得究竟它是什么和谷歌对我没有任何帮助。谁能提醒我怎么做呢?

3 个答案:

答案 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)

我知道,这不是你问题的答案,但你应该考虑重新思考你的对象结构,因为你违反了面向对象编程的共同原则。