Создание объектов в питоне и отделение от других объектов - PullRequest
0 голосов
/ 18 апреля 2019
class A():
    def __init__(self):
        pass

a = A()

Когда мы создаем экземпляр класса, какая часть класса отвечает за создание этого объекта, это init method ()?

Или что происходит, когда мы делаем A()?

Кроме того, когда мы создаем более одного объекта класса, как получается, что оба эти объекта ссылаются на разные области памяти?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

В приведенном ниже классе __init__ называется конструктором и вызывается при создании экземпляра объекта класса.

class A():
    def __init__(self):
        print("creating")

a = A()
#creating

Когда вы создаете два объекта одного класса, оба ссылаются на разные области памяти, как вы можете видеть ниже

a1 = A()
a2 = A()
print(a1)
print(a2)
<__main__.A object at 0x108ea6f98>
<__main__.A object at 0x108ea6f28>

Оба объекта ссылаются на разные области памяти 0x108ea6f98 и 0x108ea6f28

Более того, вы можете проверить id объектов, которые также различаются

print(id(a1))
print(id(a2))
#4529184552
#4529329264
0 голосов
/ 18 апреля 2019

Класс будет создан, даже если вы просто наберете это ..

class A: 
    pass

a = A() 

__init__ похоже на конструктор, который он будет вызывать при создании экземпляра класса.


Теперь, когда вы создаете более одного объекта одного класса, все они сохраняются в памяти отдельно.

Например,

class A:
    pass

a = A()
b = A()

print( a == b )
print( a, b )

Вывод

False
<__main__.A object at 0x1049a4898> <__main__.A object at 0x1049a4710>

Когда вы напечатаете первое утверждение, оно напечатает False.Если вы сравните оба объекта a и b из второго оператора печати, вы можете сказать, что они не совпадают.

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