在Python

时间:2017-10-26 03:31:55

标签: python oop inheritance member

我有一个基类A,由类B和C继承,我试图设置一个实例变量。这种变量由基类A的方法使用如下。

class A(object):
    def foo(self):
        print(self.value)

class B(A):
    value = "B"

class C(A):
    value = "C"

>>> b = B()
'B'
>>> c = C()
'C'

我理解函数foo只会在执行期间进行评估,只要我不直接从foo的实例调用A就可以了。 然而,我无法理解value = "B"value = "C" 如何成为 self.value = "B"self.value = "C"

对不起,如果这是一个天真的问题;我已经离python很远了很长一段时间了,真的没有看到任何类似的东西。我使用的是Python 2.7.12版。

1 个答案:

答案 0 :(得分:1)

您无法在Python中向基类添加实例变量,因为实例变量只能添加到实例中,而不能添加到类中。

在您的示例中,“value”是一个类变量。在Python中,当没有具有给定名称的实例变量时,它会回退到具有该名称的类变量。但是,如果为b.value分配了一个新值,那么将在b上创建一个实例变量。 B.值将不受影响,B的任何新实例都会受到影响。

我没有找到行为的权威参考,但这里有一篇关于它的文章。 https://www.toptal.com/python/python-class-attributes-an-overly-thorough-guide