我正在尝试设计一个在库中具有多个已分配属性的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
在全局中声明字典似乎是一个糟糕的主意,那么如何在不将“功能”的键分解为自己的特定值的情况下覆盖特定元素?
编辑如下评论
答案 0 :(得分:1)
您无法访问类定义中的超类属性,因为该类尚未定义(它仍在定义中),因此它还不知道它的超类是什么。另请注意,如果您可以访问它们(或者通过执行CC.Features
明确访问它们),您将修改CC
中的词典,而不是在F
中创建新词典。因此,F
中的更改会影响CC
,这几乎肯定不是您想要的。
一种方法是使用类装饰器在定义类之后修改它,例如通过将其Features
值与其超类的值合并。这也可以通过元类来完成。
假设您确实希望Features
成为类属性。从您的示例中不清楚,但在许多情况下,最好将其设为实例属性,在这种情况下,您可以在__init__
中更新它。
也许你可以提供一些关于你如何使用Feature
属性以及你希望用它来实现的更多信息。