Python:如何在类级别访问超级属性属性定义
在Python中,定义一个类时,可以在新的属性定义中使用之前定义的属性,而无需进一步参考。Python:如何在类级别访问超级属性属性定义
class Parent(object):
a_value = 'a'
another_value = 'b'
all_values = (a_value, another_value)
是否有可能在派生类中做同样的事情,但仍然可以访问这些父属性中的一些?
我试图做这样的事情:
class Child(Parent):
a_child_value = 'c'
all_values = (a_value, another_value, a_child_value)
但它似乎并没有考虑到父母继承和给了我以下错误:
NameError: name 'a_value' is not defined
那么,有没有任何方式来表明a_value
和another_value
应该从父类而不是当前上下文?
在我的情况下,特别是值不是字符串,而是预编译的正则表达式,所以我想避免每次创建新实例时都必须在__init__
方法内创建它们。
您需要做Parent.a_value
才能获得您之后的值。 a_child是一个静态属性,因此附加到类本身而不是局部变量。
class Child(Parent):
a_child_value = 'c'
all_values = (Parent.a_value, Parent.another_value, a_child_value)
如果它是从某个东西派生出来的,那么您必须输入它从中派生出来的东西。
恐怕这不是一个有效的解决方案,因为'Child'还没有完全定义,它不存在作为有效的参考。你可以尝试自己(这,顺便说一句,你应该总是在回答任何问题之前做),并看到它引发了以下内容:'NameError:名称'儿童'未定义' –
是的,你是正确的,我非常用于抽象而不是静态的,并且会像那样工作。我确实测试过,但我只是快速地将X作为父母,Y作为孩子,只检查我是否可以从IDE获得“一个”属性(即X)“>>>”thing(don不知道那条线的正确名字)。 – Frogboxe
这样子。
class Child(Parent):
a_child_value = 'c'
all_values = (Parent.a_value, Parent.another_value, a_child_value)
是的,这更像它。 –
如果您从对象类型类创建父对象。还有另一种方式来处理它。这会更有意义。 – Howardyan
你能解释一下“从对象创建父对象”是什么意思?另外,如果它更有意义,为什么你不在回答中使用它,而不是那些不是? –
@Moses Koledoye:我不会认为这是重复的:虽然你所指出的问题含蓄地包含了我正在寻找的信息,但所要求的信息是不同的。我问了“怎么做”,因为我无法在任何地方找到它,而这个问题就是以这种方式问“为什么”。 –
愚蠢的目标不仅仅是回答你的问题。它更详细地描述你想要什么;为什么和如何。问题不一定要完全一样。 –