@ jonrsharpe правильно. Python считается «языком программирования для взрослых» - в том смысле, что у него нет механизма, препятствующего программисту делать то, что вы от него не хотите. Добавляя двойное подчеркивание __methodName
, вы говорите другим программистам: «Не называйте это внешне». Но если они захотят, они будут: D
Если вы действительно хотите стать педантичным, вы можете сделать что-то похожее на здесь и проверить метод вызова, чтобы убедиться, что он «авторизован»вызывающий метод.
Т.е.
import inspect
class A():
def fn1(self):
curframe = inspect.currentframe()
calframe = inspect.getouterframes(curframe, 2)
if "fn3" == calframe[1][3]:
print("This is fn1")
else:
print("NO NO! Bad function '{}'".format(calframe[1][3]))
def fn2(self):
curframe = inspect.currentframe()
calframe = inspect.getouterframes(curframe, 2)
if "fn3" == calframe[1][3]:
print("This is fn2")
else:
print("NO NO! Bad function '{}'".format(calframe[1][3]))
def fn3(self):
self.fn1()
print("This is fn3")
def notfn3(self):
self.fn1()
print("This is notfn3")
if __name__ == '__main__':
o = A()
o.fn3()
o.notfn3()
ВЫХОД:
This is fn1
This is fn3
NO NO! Bad function 'notfn3'
This is notfn3
Но (ИМХО), это много кода и много дополнительныхобработка, просто чтобы заставить кого-то не делать то, что вы не хотите, чтобы он делал.