gpt4 book ai didi

python类和子类的调用顺序和固有

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:54 25 4
gpt4 key购买 nike

我是 python 类的新手,我遇到了这个问题,我在这里没有找到类似的问题。如果您知道哪个帖子或线程可能已经回答了这个问题,请告诉我。提前致谢。

这是函数。定义四个类,A、B、C 和 D。

class A(object):
def __init__(self):
self.a = 1
def x(self):
print ("A.x")
def y(self):
print ("A.y")
def z(self):
print ("A.z")

class B(A):
def __init__(self):
A.__init__(self)
self.a = 2
self.b = 3
def y(self):
print ("B.y")
def z(self):
print ("B.z")

class C(A):
def __init__(self):
A.__init__(self)
self.a = 4
self.c = 5
def y(self):
print ("C.y")
def z(self):
print ("C.z")


class D(C, B):
def __init__(self):
C.__init__(self)
B.__init__(self)
self.d = 6
def z(self):
print ("D.z")

obj = D()
obj.y()

这是来自在线资源。我想知道为什么 obj.y() 打印出 C.y 而不是 B.y?这是因为在 D(C,B) 类中:C 在 B 之前被调用,所以 python 首先将方法 y 与 C 匹配,但不会继续查看 B 类中的方法 y?然而,值 a、b、c、d 将随着以后的调用而更新。非常感谢!

最佳答案

在 Python 方法中,重写 只是在子类中定义一个与父类中的方法同名的方法。当您在对象中定义一个方法时,您使后者能够满足该方法调用,因此其祖先的实现不会发挥作用。

class Parent(object):
def __init__(self):
self.value = 5

def get_value(self):
return self.value

class Child(Parent):
def get_value(self):
return self.value + 1

输出:

>>> c = Child()
>>> c.get_value()
6

关于python类和子类的调用顺序和固有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26728145/

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