python-32-类的组合与初识继承

前言

组合:在一个类的属性中调用了另一个类,将另一个类的对象作为数据属性,称为类的组合。

继承:一种新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类,先有父类才会有子类

一、类组合

组合指的是,在一个类中调用了另一个类,将另一个类的对象作为数据属性,称为类的组合。

1、组合实例1:

①Ojb_1是装备库类,func_name是一件装备,人物装备后会增加1000的战力,self.agg=原人物的战力

②Ojb_2是角色类,有角色的名称与原角色的战力等信息,self.Ojb_1是将原人物的战力先传至装备库,只要人物调用装备了func_name就会在原战力基础上增加1000

# 1、组合实例
class Ojb_1:
    '''假设Ojb_1是一个装备库类,func_name是其中一件装备,装备后加1000战力。'''
    def __init__(self, agg):
        self.agg = agg

    def func_name(self):
        self.agg += 1000                # 在本身的战力上+1000
        return self.agg                 # 返回最终战力

class Ojb_2:
    '''假设Ojb_2是一个角色类,每个角色都有名称等信息'''
    def __init__(self, name, agg):
        self.name = name                # 角色名称
        self.agg = agg                  # 本身的战力
        self.Ojb_1 = Ojb_1(self.agg)    # 将该人物原来的战力传到装备库类

if __name__ == '__main__':
    '''假设广深小龙原来战力=500'''
    r1 = Ojb_2('广深小龙', 500)
    res = r1.Ojb_1.func_name()
    print(res)

2、组合实例2
假如:我是一个人类,叫广深小龙,我学的是Python,我的生日是1999年6月6日,工作是IT,地址是广深

# 2、实例2
# 我是一个人,叫广深小龙,我学的是Python,我的生日是1999年6月6日,工作是IT,地址是广深
class Work:
    '''工作是IT,用的是Python,所以我学习Python'''
    def work_lg(self, work='IT', lg='Python'):
        return '工作是:%s,用的是:%s' % (work, lg)

class Birth:
    '''出生日期:birth,地址:address'''
    def birth_add(self, birth, address):
        return '出生日期:%s,地址:%s' % (birth, address)

class Race:
    def __init__(self, name):
        self.name = name
        self.Work = Work()
        self.Birth = Birth()

if __name__ == '__main__':
    r = Race('广深小龙')
    print(r.Work.work_lg())
    print(r.Birth.birth_add('1996.6.6', '广深'))

二、初识继承

就好像人、猪等动物,抽取成为一个动物的父类,人类、猪都可以继承动物为父类:

1、简单认识继承,顺序:父类在上面,子类在后面。(父总比子出生得早)

# 1、初识继承
class A:pass

class B:pass

# Python语言中一个类可继承多个父类
class AB_son(A, B):pass     # 继承了A、B类
print(AB_son.__bases__)       # 查看父类
print(A.__bases__)            # 没有继承父类,默认是类的祖宗:object

 2、继承用法

实例化子类后,可以用子类调用父类的某个方法:

# 2、继承用法实例
class Work:
    '''工作是IT,用的是Python,所以我学习Python'''
    def work_lg(self, work='IT', lg='Python'):
        return '工作是:%s,用的是:%s' % (work, lg)


class Race(Work):               # 继承了 Work 类
    def __init__(self, name):
        self.name = name

if __name__ == '__main__':
    r = Race('广深小龙')
    res = r.work_lg()            # 直接调用父类的方法
    print(res)

总结:

  • 只要是子类的对象调用,子类中有的名字 一定用子类的,子类中没有才找父类的,如果父类也没有报错
  • 如果父类 子类都有 用子类的
  • 如果还想用父类的,单独调用父类的:父类名.方法名 需要自己传self参数

正常的代码中 单继承 === 减少了代码的重复,继承表达的是一种 子类是父类的关系!

欢迎来大家QQ交流群一起学习:482713805 !!!

原文地址:https://www.cnblogs.com/gsxl/p/12494946.html