【问题标题】:Is it possible to mention a class inside itself?是否可以在其内部提及一个类?
【发布时间】:2020-06-23 13:38:56
【问题描述】:

我在这个类的构造函数中创建了一个名为User 的类,我想将该类添加到字典中。代码:

users = {}


class User:
    def __init__(self, id_):
        self.id_ = id_
        
        # What I want to do:
        users[id_] = THE_CLASS_DEFINED

我尝试创建一个名为add_user 的单独函数,它定义类并将类添加到users。哪个工作得很好,但是如果您可以定义类并将其添加到类中的字典中(如果您知道我的意思),那就太好了。

如果可能,请告诉我,我们将不胜感激。谢谢!

【问题讨论】:

  • 我认为您是在询问班级的 instances,而不是班级本身。如果你想让人们理解你在说什么,使用正确的词汇很重要。
  • @chepner 猜猜看,有 2 个人回答了我的问题,这两个都是我要找的东西

标签: python class dictionary object


【解决方案1】:

如果我理解您的问题,您可以将self 保存为字典中的值

class User:
    def __init__(self, id_):
        self.id_ = id_
        users[id_] = self

那么例如

>>> a = User(5)
>>> b = User(9)
>>> print(users)

{5: <__main__.User object at 0x000001FC68D4F780>,
 9: <__main__.User object at 0x000001FC68E7FCC0>}

【讨论】:

    【解决方案2】:

    如果你希望它是精确的User,而不是其他,而不依赖于奇怪的魔法,你会卡住说:

    users[id_] = User
    

    如果您想要精确的User,并且您使用的是 Python 3,但不想重复自己,您可以使用奇怪的魔法(支持 no-arg super 实现的魔法)来完成这项工作:

    users[id_] = __class__
    

    如果你想要self 的类是什么(它可能是User 的子类),你可以这样做:

    users[id_] = type(self)
    

    如果你只是把问题用错了,想要instance,而不是字典中的class,你可以这样做:

    users[id_] = self
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2020-08-20
      • 2012-04-11
      • 2011-01-31
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多