yandyand

导航

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()

posted on 2020-08-05 16:34  yandyand  阅读(117)  评论(0编辑  收藏  举报