在创建子类项目 - Python 3+时在类对象字典中添加键

时间:2018-06-15 03:51:52

标签: python python-3.x

我正在创建一个登录系统,以便练习初学者的python技能并寻求一些帮助。

这是我的代码的一部分我被困住了:

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')

从那里我想到能够使用子类Username创建用户,有没有办法让我在创建用户时这样做:

p1 = Username('Jo', dtb1)

用户' Jo'直接添加到字典dtb1中,例如:

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

这可能不是最好的方法,但使用我所知道的这就是我想出的。它甚至可能吗?非常感谢您的帮助! 干杯

1 个答案:

答案 0 :(得分:0)

如果您希望Userbase包含多个UsernameUsername不应该是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)