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

标签 python class inheritance definition calling-convention

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

相关文章:

c++ - 继承类的构造函数格式

python - 如何解析一个简单的csv文件?

ios - Swift:在 UIButton 类中设置宽度和高度

java - 如何在 Java 中调用另一个类的方法?

ruby - 如何在 Ruby 中实现私有(private)内部类

c++ - 在固定模板参数的同时扩展模板类

c++ - 智能指针和派生类

python - 如何处理从 python 函数返回的空(无)元组

python - 如何在不使用for循环的情况下从数组列表中删除元素

python - 是否可以确保在 Windows 下播放时音频不被修改