0

我正在尝试设计一个在库中具有多个分配属性的父类。

class CC():
    Features = {"1" : "", "2" : ""}



class F(CC):
    Features["1"] = { key : value }

当我尝试覆盖该类的子字典中的元素(使用子字典)时,它给了我:

Traceback (most recent call last):
  File "C:\Python27\Rough\Starting UP\AttributeInput.py", line 7, in <module>
    PersonClass = Fighter()
  File "C:\Python27\Rough\Starting UP\CharClass.py", line 45, in __init__
    classFeatures["1"] = {"Bonus Feat" : "Select a free feat from Fighter List"} 
NameError: global name 'classFeatures' is not defined

在全局中声明字典似乎是一个糟糕的主意,那么如何在不将“功能”的键分解为它们自己的特定值的情况下覆盖特定元素呢?

编辑如下评论

4

1 回答 1

1

您无法访问类定义中的超类属性,因为该类尚未定义(仍在定义中),因此它还不知道其超类是什么。另外,请注意,如果您可以访问它们(或者如果您通过执行显式访问它们CC.Features),您将修改 dict in CC,而不是创建新 dict in F。因此,您的更改F会影响CC,这几乎肯定不是您想要的。

一种方法是使用类装饰器在定义类后对其进行修改,例如通过将其Features值与其超类的值合并。这也可以通过元类来完成。

那是假设您实际上想Features成为一个类属性。从您的示例中不清楚,但在许多情况下,将其设为实例属性可能会更好,在这种情况下,您将在__init__.

也许您可以提供更多关于您如何使用该Feature属性以及您希望用它完成什么的信息。

于 2013-01-24T03:06:59.153 回答