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

2024-04-26 06:05:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试设计一个在库中具有多个指定属性的父类。你知道吗

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”的键分解为它们自己的特定值的情况下重写特定元素呢?你知道吗

编辑如下评论


Tags: inpy元素字典lineclassfilecc
1条回答
网友
1楼 · 发布于 2024-04-26 06:05:07

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

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

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

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

相关问题 更多 >