gpt4 book ai didi

Python多重继承不显示类变量或第二个继承基类的方法

转载 作者:太空狗 更新时间:2023-10-30 00:38:11 28 4
gpt4 key购买 nike

你好很棒的社区,作为类(class)的一部分,我正在使用 Python 学习 OOPS 概念。我在 python 中遇到多重继承问题。以下是我的代码:

#!/usr/bin/env python

class Base1(object):
def __init__(self):
self.base1var = "this is base1"


class Base2(object):
def __init__(self):
self.base2var = "this is base2"

class MainClass(Base1, Base2):
def __init__(self):
super(MainClass, self).__init__()


if __name__ == "__main__":
a = MainClass()
print a.base1var
print a.base2var

运行时出现如下错误

print a.base2var
AttributeError: 'MainClass' object has no attribute 'base2var'

如果我调换继承类的顺序,错误中的变量名会相应改变。

当我想调用两个继承类的构造函数时,我使用的 super() 是不是错了?

如何正确继承多个基类并使用主类中的变量和方法而不出现此错误?

谢谢。

最佳答案

您需要为 Base1 添加一个 super 调用,这样 Base2 的 __init__ 将在 Base1 之后被调用。您还可以添加对 Base2 的 super 调用。这不是必需的,但不会造成伤害。

class Base1(object):
def __init__(self):
super(Base1, self).__init__()
self.base1var = "this is base1"

class Base2(object):
def __init__(self):
#super(Base2, self).__init__()
self.base2var = "this is base2"

class MainClass(Base1, Base2):
def __init__(self):
super(MainClass, self).__init__()


if __name__ == "__main__":
a = MainClass()
print a.base1var
print a.base2var

输出

this is base1
this is base2

顺便说一句,你真的应该使用 Python 3。super 在现代 Python 中要好得多。 :)

关于Python多重继承不显示类变量或第二个继承基类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082893/

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