LINUX.ORG.RU

Python: создание объектов


0

0

#есть класс, где есть переменная типа хеш:

class test():
hash={}

#теперь создадим пару обьектов класса тест :

A=test()
B=test()

#теперь тупо что-нить положим в хеши :

A.hash['AAA']=111
B.hash['BBB']=222

#посмотрим, что в хешах:

>>> A.hash
{'AAA': 111, 'BBB': 222}

>>> B.hash
{'AAA': 111, 'BBB': 222}


вопрос: почему такое поведение? словно переменная hash у них общая...

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

★★★★★

Вот так надо:

class test(): 
    def __init__(self):
        self.hash={}

А иначе ты работаешь с переменными класса а не инстанса. А они общие для всех инстансов. Всё подробно расписано в туториале.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

да, я это уже понял, так работает - да.
но получается, что так надо инитить все переменные?

dreamer ★★★★★
() автор топика
Ответ на: комментарий от const86

Ни разу не наступал. Всё это от того что люди туториал не дочитали. Как только понимаешь про scope(или как называется область поиска переменных?), про __dict__ итп проблем не возникает.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

> Ни разу не наступал.

Да я тоже, но народ вон создаёт темы об этом с завидной регулярностью...

const86 ★★★★★
()
Ответ на: комментарий от const86

> Грабли сделаны на совесть, часто на них наступают.

Матчасть хоть немного учить надо. Те, кто привыкли действовать по аналогии - ССЗБ.

tailgunner ★★★★★
()
Ответ на: комментарий от const86

>Грабли сделаны на совесть, часто на них наступают.

это защита от дурака, не надо путать :)

dimon555 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.