我是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/