Как python решает создать новый экземпляр объекта или использовать старый? - PullRequest
0 голосов
/ 20 июня 2020

Я хочу понять, как python решает создать новый экземпляр объекта или использовать существующий. Я смотрел на то, что, как мне кажется, вызывает у меня проблему, и подозреваю, что это из-за моего непонимания того, что происходит под капотом.

Рассмотрим этот пример в файле dummy.py: 1003

import unittest


class Addition:

    def __init__(self, a, b):
        self.__a = a
        self.__b = b

    def do_addition(self):
        return self.__a + self.__b


class IsolatedTests(unittest.TestCase):

    def custom_add(self, a, b):
        addition = Addition(a, b)
        print(addition)
        return addition.do_addition()

    def test_case_1(self):
        a = 5
        b = 10
        self.assertEqual(15, self.custom_add(a, b))

    def test_case_2(self):
        a = 20
        b = 15
        self.assertEqual(35, self.custom_add(a, b))

    def test_case_3(self):
        a = 99
        b = 105
        self.assertEqual(204, self.custom_add(a, b))
class CombinedTests(unittest.TestCase):

    def custom_add(self, a, b):
        addition = Addition(a, b)
        print(addition)
        return addition.do_addition()

    def test_case_1(self):
        a = 5
        b = 10
        self.assertEqual(15, self.custom_add(a, b))
        a = 20
        b = 15
        self.assertEqual(35, self.custom_add(a, b))
        a = 99
        b = 105
        self.assertEqual(204, self.custom_add(a, b))

Здесь я фактически получаю один и тот же точный адрес памяти для всех 3 экземпляров объекта сложения.

<dummy.Addition object at 0x02BBBF70>    
<dummy.Addition object at 0x02BBBF70>    
<dummy.Addition object at 0x02BBBF70>    

Может кто-нибудь помочь мне понять, в чем разница? Спасибо как всегда!

1 Ответ

1 голос
/ 21 июня 2020

В классе CombinedTests по одному и тому же адресу последовательно создаются три объекта Addition. Это не означает, что это один и тот же объект. .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...