Блог

Python: privat and static method

Не думаю, что нужно говорить, что такое статический метод и приватный. Во всех языках они имеют одну и ту же спецификацию, но вид разный. У некоторых нужно указывать приставку (protected, static, public и т.д.) к методу, у других выполняется спецификой синтаксиса.

Для указания статического метода, выступает декоратор, ниже показан пример статического метода:

class TestClass(object):
   @staticmethod
   def the_static_method(x):
      print x

TestClass.the_static_method(2)

Приват метод, в языке Python указывается спецификой синтаксиса, чтобы лучше понять, достаточно один раз увидеть:

class TestClass(object):
   __bar = 99
   def print_var(self):
      print self.__bar

foo = TestClass()
# Попытка получить доступ на прямую, будет завершена исключением  
foo.__bar  #direct attempt no go
   Traceback (most recent call last):
   File "", line 1, in <module>
   AttributeError: 'Foo' object has no attribute '__bar'

# Класс, может получить к нему доступ
foo.print_var()  -> 99

# Когда выполняете дебаг, и просматриваете объект, вы можете увидеть что-то похожее
dir(TestClass)
['print_var', '_TestClass__bar', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', ‘__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

#и получить на нее искаженное имя! (но вы не должны так делать, это как бы не правильно!)
foo._TestClass__bar  99