python中继承的重要性

问题描述

我已经在python中实现了继承并且代码正在工作,此外,我还尝试了以其他方式做同样的事情,我想知道继承比我第二种做同样的事情有优势的地方。

class A:
    def __init__(self,a,b):
        self._a = a
        self.b = b
    def addition(self):
        return self._a+self.b

################################### Inheritance ############

class B(A):
    def __init__(self,b):
        super().__init__(a,b)
        print("Protected in B ",self._a)


################################### Doing same work by creating object #################

class D():
    def __init__(self,b):
        self.a = a
        self.b = b
        d = A(self.a,self.b)
        print(d.addition())
        print("Protected in D ",d._a)

我能够以两种方式调用A类的受保护成员。 A的任何成员都可以通过两种方式访问​​,因此,为什么继承很重要。在哪种情况下,只有继承会起作用而不能创建对象?

解决方法

我不认为您的示例展示了继承的力量。

  1. 第二个示例看起来并不像OOP。除非在构造器 中它是实例变量还是静态变量,否则我很少看到对象创建。
  2. 并非每个基类都具有子类具有的所有字段。例如,一个Animal类可能是超通用的,但是随着更多类似Tiger的类对其进行扩展,Tiger将具有更多的Tiger属性(与{{ 1}}类。

第二个示例将集中讨论您的问题,如果您要访问受保护的变量Animal,则要求您使用self.d,除非您想执行_a,然后d = D(),它不是很受保护。您正在d.a中创建对象,而在第一个示例中仍在设置类的蓝图。那可能不是您想要做的,因为创建对象的第二个示例看起来像是驱动程序类。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...