在Python类中覆盖从父级到子级的库值

时间:2013-01-24 03:00:25

标签: python class dictionary

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

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



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

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

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

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

编辑如下评论

1 个答案:

答案 0 :(得分:1)

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

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

假设您确实希望Features成为类属性。从您的示例中不清楚,但在许多情况下,最好将其设为实例属性,在这种情况下,您可以在__init__中更新它。

也许你可以提供一些关于你如何使用Feature属性以及你希望用它来实现的更多信息。