Рубрики

Объектно-ориентированное программирование на Python | Набор 2 (скрытие данных и печать объектов)

Предварительное условие: объектно-ориентированное программирование на Python | Набор 1 (класс, объект и члены)

Скрытие данных

В Python мы используем двойное подчеркивание (или __) перед именем атрибута, и эти атрибуты не будут видны снаружи.

class MyClass:

  

    # Скрытый член MyClass

    __hiddenVariable = 0

    

    # Метод члена, который изменяется

    # __hiddenVariable

    def add(self, increment):

        self.__hiddenVariable += increment

        print (self.__hiddenVariable)

   
# Код драйвера

myObject = MyClass()     

myObject.add(2)

myObject.add(5)

  
# Эта строка вызывает ошибку

print (myObject.__hiddenVariable)

Выход :

2
7
Traceback (most recent call last):
  File "filename.py", line 13, in 
    print (myObject.__hiddenVariable)
AttributeError: MyClass instance has 
no attribute '__hiddenVariable' 

В приведенной выше программе мы пытались получить доступ к скрытой переменной вне класса, используя объект, и она вызвала исключение.

Мы можем получить доступ к значению скрытого атрибута с помощью хитрого синтаксиса:

# Программа Python, чтобы продемонстрировать, что скрыто
# члены могут быть доступны вне класса

class MyClass:

  

    # Скрытый член MyClass

    __hiddenVariable = 10

  
# Код драйвера

myObject = MyClass()     

print(myObject._MyClass__hiddenVariable)

Выход :

10

Частные методы доступны за пределами их класса, но не так легко доступны. Ничто в Python не является по-настоящему приватным; внутренне, имена частных методов и атрибутов подогнаны и unmangled на лету, чтобы они казались недоступными их данными именами [см это для источника].

Печать объектов

Печать объектов дает нам информацию об объектах, с которыми мы работаем. В C ++ мы можем сделать это, добавив друга ostream & operator

class Test:

    def __init__(self, a, b):

        self.a = a

        self.b = b

  

    def __repr__(self):

        return "Test a:%s b:%s" % (self.a, self.b)

  

    def __str__(self):

        return "From str method of Test: a is %s," \

              "b is %s" % (self.a, self.b)

  
Код водителя

t = Test(1234, 5678)

print(t) # Это вызывает __str __ ()

print([t]) # Это вызывает __repr __ ()

Выход :

From str method of Test: a is 1234,b is 5678
[Test a:1234 b:5678]

Важные моменты о печати:

  • Если метод __str__ не определен, print t (или print str (t)) использует __repr__.

    class Test:

        def __init__(self, a, b):

            self.a = a

            self.b = b

      

        def __repr__(self):

            return "Test a:%s b:%s" % (self.a, self.b)

      
    Код водителя

    t = Test(1234, 5678)

    print(t) 

    Выход :

    Test a:1234 b:5678
  • Если метод __repr__ не определен, используется значение по умолчанию.

    class Test:

        def __init__(self, a, b):

            self.a = a

            self.b = b

      
    Код водителя

    t = Test(1234, 5678)

    print(t) 

    Выход :

Эта статья предоставлена Shwetanshu Rohatgi . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Объектно-ориентированное программирование на Python | Набор 2 (скрытие данных и печать объектов)

0.00 (0%) 0 votes