【问题标题】:Can you set the property of a Python class equal to an empty class object?你能设置一个 Python 类的属性等于一个空的类对象吗?
【发布时间】:2021-12-26 07:02:06
【问题描述】:

我有一个玩家类和一个武器类。武器类有一个 reload 方法来检查玩家的库存属性。玩家类有一个武器属性,该属性将保存当前武器对象,从中调用 reload 方法。由于玩家可以更换武器,我想在没有武器对象的情况下实例化玩家对象,但在开发中可以访问武器对象智能感知。这可能吗?

简而言之,我希望能够从我的玩家类中查看我的武器类的方法,而无需创建实例。

【问题讨论】:

  • 我认为你的玩家类应该有一个继承自武器类的武器属性。
  • 你可能想在各自的类中创建一个空的构造方法
  • 如果您对当前设计的关注主要与智能感知有关,您可能希望将您的问题主要指向该方向。也就是说,如何获取尚未分配的属性的类型提示相关信息。可能有一种方法可以适当地提示属性,而无需对代码的运行时操作进行任何更改。

标签: python class oop methods properties


【解决方案1】:

为什么不使用玩家在不持有武器时持有的虚拟武器对象?它可以是一种无形的武器,让您可以在这种情况下访问任何您想要的东西。

如果它会干扰徒手状态,如果需要,您可以让玩家使用徒手攻击动画。

【讨论】:

    【解决方案2】:

    你可以使用__dict__,获取一个类的所有属性:

    class Player:
        def __init__(self, name):
            self.name = name
            self.weapon = None
    
        def weaponsAvailable(self):
            print([w for w, _ in Weapon.__dict__.items() if not w.startswith('__')])
    
    
    class Weapon:
        def gun(self):
            print('gun')
    
        def knife(self):
            print('knife')
    
    
    p = Player('Player1')
    p.weaponsAvailable()
    

    输出:

    ['gun', 'knife']
    

    【讨论】:

      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多