我正在尝试设计一个在库中具有多个指定属性的父类。你知道吗
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
在global中声明dictionary似乎是一个糟糕的主意,那么如何在不将“Features”的键分解为它们自己的特定值的情况下重写特定元素呢?你知道吗
编辑如下评论
您不能访问类定义中的超类属性,因为类尚未定义(它仍在定义中),所以它还不知道它的超类是什么。另外,请注意,如果您可以访问它们(或者通过执行
CC.Features
显式访问它们),那么您将在CC
中修改dict,而不是在F
中创建新dict。所以你在F
中的改变会影响CC
,这几乎肯定不是你想要的。你知道吗一种方法是在定义类之后使用类装饰器来修改类,例如通过将其
Features
值与其超类的值合并。这也可以通过元类来实现。你知道吗这是假设您确实希望
Features
成为类属性。从您的示例中还不清楚,但在许多情况下,最好将其设置为实例属性,在这种情况下,您可以在__init__
中更新它。你知道吗也许您可以提供一些关于如何使用
Feature
属性以及希望用它实现什么的更多信息。你知道吗相关问题 更多 >
编程相关推荐