gpt4 book ai didi

python - python中多重继承的行为

转载 作者:太空狗 更新时间:2023-10-30 00:51:42 25 4
gpt4 key购买 nike

In [5]: class a(object):
...: def __init__(self):
...: print "In class a"
...: self.a = 1
...:
In [6]: class b(object):
...: def __init__(self):
...: print "In class b"
...: self.b = 2
...:
...:

In [7]: class c(b, a):
...: pass
...:
In [8]: c.mro()
Out[8]:
[<class '__main__.c'>,
<class '__main__.b'>,
<class '__main__.a'>,
<type 'object'>]

In [9]: obj = c()
In class b

In [10]: obj.__dict__
Out[10]: {'b': 2}

c 的默认 __init__ 方法在 obj 创建时调用,它在内部调用 __init__只有 b 类。

根据我的理解,如果我从 2 个类继承,我的派生类对象应该具有来自两个类的变量(除非它们对这些类是私有(private)的)。

我的问题:我期望我的派生对象包含来自两个类的变量是错误的吗?如果是这样,为什么?类 a__init__ 不应该也被调用吗?用 C++ 这样的语言会发生什么?

最佳答案

在 python 中,默认情况下不会调用上层类的初始化方法。为此,您必须使用 super 显式调用它们如下:

class a(object):
def __init__(self):
super(a, self).__init__()
print "In class a"
self.a = 1

class b(object):
def __init__(self):
super(b, self).__init__()
print "In class b"
self.b = 2

class c(b, a):
pass

obj = c()

示例输出。

In class a
In class b

编辑:关于为什么会这样,我想说这是一个基于 The Zen of of Python 的设计决定。 :

Explicit is better than implicit.

关于python - python中多重继承的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9256781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com