Python 中的继承和函数覆盖
Inheritance and function overriding in Python
在python中,如果class C继承自另外两个classes C(A,B),并且A和B有同名不同的方法return 值,该方法 return 在 C 上的值是多少?
“继承两种方法”不太准确。发生的情况是 C
有一个 方法解析顺序 (MRO),即列表 [C, A, B, object]
。如果您尝试访问 C
未定义或覆盖的方法,MRO 将确定接下来将检查哪个 class。如果在 A
中定义了所需的方法,它会隐藏 B
.
中具有相同名称的方法
>>> class A:
... def foo(self):
... print("In A.foo")
...
>>> class B:
... def foo(self):
... print("In B.foo")
...
>>> class C(A, B):
... pass
...
>>> C.mro()
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
>>> C().foo()
In A.foo
现在将遵循MRO顺序,如果你在C中继承A和B,那么优先顺序从左到右,所以,A将被优先调用,A的方法将被调用而不是B
在python中,如果class C继承自另外两个classes C(A,B),并且A和B有同名不同的方法return 值,该方法 return 在 C 上的值是多少?
“继承两种方法”不太准确。发生的情况是 C
有一个 方法解析顺序 (MRO),即列表 [C, A, B, object]
。如果您尝试访问 C
未定义或覆盖的方法,MRO 将确定接下来将检查哪个 class。如果在 A
中定义了所需的方法,它会隐藏 B
.
>>> class A:
... def foo(self):
... print("In A.foo")
...
>>> class B:
... def foo(self):
... print("In B.foo")
...
>>> class C(A, B):
... pass
...
>>> C.mro()
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
>>> C().foo()
In A.foo
现在将遵循MRO顺序,如果你在C中继承A和B,那么优先顺序从左到右,所以,A将被优先调用,A的方法将被调用而不是B