首页 > 解决方案 > 创建子类项时在类对象字典中添加键 - Python 3+

问题描述

我正在创建一个登录系统来练习我的初学者的 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')

从那里我想到能够使用子类用户名创建用户,有没有一种方法可以让我这样创建用户时:

p1 = Username('Jo', dtb1)

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

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

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

标签: pythonpython-3.x

解决方案


如果您希望 aUserbase包含多个Usernames。Username不应该是 的子类Userbase

这不是i-sa关系。AUsername不是 的特殊类型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)

推荐阅读