Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:多重继承问题_Python_Inheritance - Fatal编程技术网

Python:多重继承问题

Python:多重继承问题,python,inheritance,Python,Inheritance,我对python中的继承问题有点困惑。 我知道下面的例子很“愚蠢”,但我简化了我最初的问题。 假设我们有3节课 class testT(object): def check(self, str): return "t" in str class testTE(testT): def check(self, str): return "e" in str class testTES(testTE): def check(self, str):

我对python中的继承问题有点困惑。
我知道下面的例子很“愚蠢”,但我简化了我最初的问题。
假设我们有3节课

class testT(object):
    def check(self, str):
       return "t" in str

class testTE(testT):
    def check(self, str):
       return "e" in str

class testTES(testTE):
    def check(self, str):
       return "s" in str
我想要一个输出,比如:

>>> print testTES().check("test")
>>> True    (Because string "test" contains "s","e" and "t" characters)
>>> print testTES().check("dog")
>>> False
>>> print testTES().check("dogs")
>>> False   (Contains a "s" but no "e" and no "t")
>>> print testTE().check("tuple")
>>> True    (Contains "e" and "t")
如何实现此行为?我尝试使用“super”,但我的方法没有成功。

感谢您的帮助

您只需将子类中的
check
调用与
super(…)的输出结合起来即可。check()


只需将子类中的
check
调用与
super(…)的输出结合起来即可。check()


注意OP似乎在使用Python 2,因此在这种情况下,
super
print
会略有不同。@jdehesa我修复了对
super
的调用,在这种情况下,
print(…)
worksNote OP似乎在使用Python 2,因此,在这种情况下,
super
print
将略有不同。@jdehesa我修复了对
super
的调用,在这种情况下,
print(…)
仅作为注释工作,请注意,这不是我们所知道的。在这里,每个类都有一个父类,因此它是单继承(即使继承层次结构有多个级别)。当一个类同时有多个父类时,就会发生多重继承,这会导致诸如“菱形问题”之类的问题,并且在两个继承的方法具有相同的签名(或者在Python中只有相同的名称)的情况下会混淆优先级规则。请注意,这不是我们所知道的。在这里,每个类都有一个父类,因此它是单继承(即使继承层次结构有多个级别)。当一个类同时有多个父类时,就会发生多重继承,这会导致诸如“菱形问题”之类的问题,并且在两个继承的方法具有相同的签名(或者在Python中只有相同的名称)的情况下会混淆优先级规则。
class testT(object):
    def check(self, str):
        return "t" in str

class testTE(testT):
    def check(self, str):
        return super(testTE, self).check(str) and "e" in str

class testTES(testTE):
    def check(self, str):
        return super(testTES, self).check(str) and "s" in str

print(testTES().check("test"))
# True
print(testTES().check("dog"))
# False
print(testTES().check("dogs"))
# False
print(testTE().check("tuple"))
# True