python - 在Python中向基类添加实例变量

标签 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。

最佳答案

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

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

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

关于python - 在Python中向基类添加实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945436/

相关文章:

ios - plist 中的变量替换 - 我可以定义一次值并在手动维护的 plist 中重用它吗?

c++ - 删除 std::unique_ptr<Base> 容器中的派生类

Java 泛型 : override method that differs in parameterized return type

python - 带有 beautifulsoup4 的 CSS 选择不起作用

Python 2.7 在执行后不保留其 ulimits?

java - 通过静态标识符从数据库接收数据(Java 中的示例)

python - 理解 Python 中的算术运算符

javascript - OO JavaScript : Definitive explanation of variable scope

Python 替换部分字符串

python - 将数据分散到 dask 集群工作人员 : unknown address scheme 'gateway'