Добавление ключа в словарь объектов класса при создании элемента подкласса - Python 3+

1

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

Это часть моего кода, на который я застрял:

class Userbase(object):

    def __init__ (self, name):
        self.name = name
        self.userbase = {}

    def getUBName(self):
        return self.name

    def changeUBName(self, newname):
        self.name = newname

    def resetUB(self):
        self.userbase = {}

    def __str__(self):
        return str(self.name) + ': ' + str(self.userbase)


class Username(Userbase):

    def __init__ (self, username, userbase):
        Userbase.__init__(self, userbase)
        self.username = username
        userbase[self.username] = []

Моя цель состояла в том, чтобы иметь базовый класс Userbase, где я могу создать базу данных пользователей просто как таковую:

dtb1 = Userbase('dtb1')

Оттуда я имел в виду, чтобы иметь возможность создать пользователя, использующего имя подкласса, есть ли способ сделать это так, когда пользователь будет создан как таковой:

p1 = Username('Jo', dtb1)

Пользователь "Jo" напрямую добавляется в словарь dtb1, например:

print(dtb1)
>>> dtb1: {'Jo': []}

Это может быть не самый лучший способ сделать это, но, используя то, что я знаю, это то, с чем я столкнулся. Возможно ли это? Ваша помощь будет очень признательна! ура

Теги:
python-3.x

1 ответ

0
Лучший ответ

Если вы хотите, чтобы Userbase содержала несколько Userbase Username. Username не должно быть подклассом Userbase.

Это не отношение i-sa. Username не является особым типом пользовательской Userbase.

Попробуйте вместо этого что-то вроде этого.

class Username():

  def __init__ (self, username, userbase):
      self.username = username
      userbase.userbase[self.username] = self

Здесь Username добавляет себя к базе Userbase переданной в ее конструкторе.

Еще лучший подход заключается в добавлении метода к Userbase который добавляет Username.

class Userbase(object):

  ...       

  def add_user(self, user):
    self.userbase[user.username] = user

Теперь после создания имени Username он может быть добавлен в пользовательскую Userbase.

b = Userbase('my_base')
u = Username('bob')
b.add_user(u)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню