Python на самом деле не имеет частных методов.
Однако распространенной практикой является префикс методов с подчеркиванием, если вы хотите указать, что пользователи не должны использовать эту функцию и что пользователи не могут ожидать, что эта функция будет существовать или иметь такую же подпись в будущей версии вашего API.
если у вас есть:
class MyClass:
def __init__(self):
self.my_var = 5
def amethod(self):
rslt = self._dont_access_me()
def _dont_access_me(self) -> str:
return 'Dont Access Me'
instance = MyClass()
, то пользователи знают, что они могут использовать .
instance.amethod()
, но они не должны использовать instance._dont_access_me()
методы классов, как и в большинстве других языков программирования, нечто совершенно иное. Они используются для методов, которые могут быть вызваны без экземпляра. Однако их также можно вызвать, если у вас есть экземпляр.
Примером может быть:
class AClass:
instance_count = 0
def __init__(self):
cls = self.__class__
cls.instance_count += 1
self.idx = cls.instance_count
@classmethod
def statistics(cls):
print("So far %d objects were instantiated" %
cls.instance_count)
a = AClass()
b = AClass()
AClass.statistics()
# However you can also access a classmethod if you have an instance
a.statistics()