@member9873

Как сделать чтобы на атрибут users ссылались не отдельно, а вместе?

from random import choice

class Signup:
    
    def __init__(self, login = '', password = ''):
        self.login = login
        self.password = password
        self.users = 0
        self.users += 1
    def createusers(self):
        num = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
        new_auntheficator = ''
        for _ in range(6):
            new_auntheficator += choice(num)
        print(f'{self.login} has been created! Your secret code is {new_auntheficator}')
        
    def __dell__(self):
        print('user has been deleted.')
        self.users -= 1
        
    def info(self):
        print(f'total users registred {self.users}')
        print(f'login is {self.login}, password is {self.password}')

user1 = Signup('member9873', '127nyd244oclos')
user2 = Signup('djopaloshka1337', '123nydd23udlx')
user1.createusers()
user2.createusers()
user1.info()
del user1
user2.info()


Вывод:
djopaloshka1337 has been created! Your secret code is 502646
total users registred 1
login is member9873, password is 127nyd244oclos
total users registred 1
login is djopaloshka1337, password is 123nydd23udlx


users должно быть 2
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
Ну код ты поленился, редактировать, а ответов хочешь. Во первых используй атрибуты класса, а не экземпляра класса. Во вторых переопределять __del__ плохая идея (который ты кстати с ошибкой написал __dell__). Ты ожидаешь что del вызывает __del__ нет это не так. del понижает количество ссылок на один на объект и в случае если их стало 0 то произойдет вызов. Например
class A:
    def __del__(self):
        print('Hello')
       
a = b = A()
del(a)
del(b)
Удалили ссылку, но есть еще одна и вызова __del__ не происходит. Только, когда ссылок 0 и сборщик мусора сделал свою работу произойдет вызов. Или второй пример.
class A:
    def __del__(self):
        print('Hello')
a = A()
a = 4
Я вообще del не вызывал, а __del__ вызвался. del не вызывает __del__. Так что заводи, счетчик, как атрибут класса и его увеличивай на один при создании экземпляра класса или понижай определи ему метод delete_user какой-нибудь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы