python中组合与继承的区别_python 继承与组合

#:隐式继承

#:子类会继承父类中的所有方法/功能

#:实现方法:在创建类的时候在()中添加所需要继承的父类名

# class Parent(object):

# def implicit(self):

# print("PARENT implicit()")

# class Child(Parent):

# pass

#

# dad = Parent()

# son = Child()

# dad.implicit()

# son.implicit()

#:显式覆盖

#:可以让子类里的函数有不同的功能

#:实现方法直接新定义父类中的函数

# class Parent(object):

# def override(self):

# print("PARENT override()")

#

# class Child(Parent):

# def override(self): #:再次定义"override"函数 使其有不同的行为

# print("CHILD override()")

#

# dad = Parent()

# son = Child()

# dad.override()

# son.override()

#:运行前或运行后替换

#:在使用显示覆盖后调用之前父类的函数/行为

#:实现方法:super函数

# class Parent(object):

# def altered(self):

# print("PARENT altered()")

# class Child(Parent):

# def altered(self): #:这里进行了方法重构

# print("CHILD, BEFORE PARENT altered()") #:执行打印 这一步式必然的

# super(Child,self).altered() #:用Child,self调用super函数 在此基础上返回altered()

# print("CHILD,AFTER PARENT altered()") #:在然后打印

#

# dad = Parent()

# son = Child()

#

# dad.altered()

# son.altered()

# #:三种方式混合调用

# class Parent(object):

# def implicit(self):

# print("PARENT implicit()")

# def override(self):

# print("PARENT override()")

# def altered(self):

# print("PARENT altered()")

# class Child(Parent):

# def override(self):

# print("Child override()")

# def altered(self):

# print("CHILD BEFORE PARENT altered()")

# super(Child,self).altered()

# print("CHILD AFTER PARENT altered()")

#

# dad = Parent()

# son = Child()

#

# #:隐式继承

# dad.implicit()

# son.implicit()

#

# #:显示覆盖

# dad.override()

# son.override()

#

# #:调用之前的函数/行为

# dad.altered()

# son.altered()

#:super()和__init__搭配使用

#:super()最常见的用法是在自动实例化的时候

# class Parent(object):

# def __init__(self,name):

# self.name = name

# def take(self):

# print("my name is %s"%(self.name))

#

# class Child(Parent):

# def __init__(self,name):

# super().__init__(name) #:沿用父类的自动实例化 self.name = name

# dad = Parent("杨洋")

# son = Child("yy")

# son.take()

#:组合

#:这里使用的不是父类与子类之间的关系 而是一个类中有另一个类的存在

class Other(object):

def override(self):

print("OTHER override()")

def implicit(self):

print("OTHER implicit()")

def altered(self):

print("OTHER altered()")

class Child(object):

def __init__(self): #:自动实例化

self.other = Other() #:在自动实例化当中实例化调用Other类 == Other()

def implicit(self): #:创建implicit方法

self.other.implicit() #:直接调用other类中的implicit()方法

def override(self):

self.other.override() #:直接调用other中的override()方法 son.other.override

def altered(self): #:方法重写/显示覆盖

print("CHILD,BEFORE OTHER altered()")

self.other.altered() #:继续调用other类中的altered()方法

print("CHILD,AFTER OTHER altered()..")

#:谁进行了实例化self就是谁 son == self

son = Child()

son.implicit()

son.override()

son.altered()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值