Python基础18_类与类之间的关系

类与类之间的关系
    依赖关系. 关联关系. 组合关系. 聚合关系. 继承关系. 实现关系
一. 依赖关系
    执行某个动作的时候, 需要借助某个东西, 但这个东西不是绝对的, 此时关系是最轻的, 随时可以更换另外一种东西执行动作,  通过参数的传递把另外一个类的对象传递进来
二. 关联关系. 组合关系. 聚合关系(对象里面埋对象)
    这三个在代码写法上是一样的, 但是含义是不一样的
    1. 关联关系
    两种事物必须是互相关联的, 但在某些特殊情况下是可以更改和更换的
    一对一关系:    在初始化的时候给一个对象的属性设置成另一个类的对象, 把属性和对象联系起来
    一对多关系:
    2. 聚合关系
    属于关联关系的一个特例, 侧重点是xxx和xxx聚合成xxx, 各有各的生命周期, 
    3. 组合关系
    属于关联关系中的一个特例, 组合关系比聚合关系要紧密
三. 继承关系
    子类在不影响父类的程序运行的基础上对父类进行的扩充和扩展, 这里, 把父类成为超类或者基类, 子类被称为派生类
    类名和对象默认是可以作为字典的key的, 可以hash, 即字典的key可以是对象或者类
    self: 谁调用的就是谁, 类型是根据调用方对象来变换的, 访问顺序: 永远是先找自己的, 自己的找不到再找父类的
四. 类中的特殊成员
    带双下划线的, 这些方法在特殊的场景会自动的执行
    __init__(self):
        类名()    会自动执行, 初始化操作, 
    __call__(self, *args, **kwargs):
        对象()    会自动执行, 为了对象可以被调用
    __getitem__(self, item):
        对象[key]    会自动执行, 
    __setitem__(self, key, value):
        对象[key] = value    会自动执行
    __delitem__(self, key):
        del 对象[key]    会自动执行
    __add__(self, other):
        对象 + 对象    自动执行
    __enter__(self):
    __exit__(self, exc_type, exc_val, exc_tb):
        with 对象 as 变量     会自动执行, 先执行__enter__, 再执行__exit__
    __str__(self):
        打印对象的时候会自动执行 返回该对象的字符串变现形式
    __repr__(self):
        返回该对象的官方字符串表现形式
    __hash__(self):
        __hash__ == None    对象就不可哈希了
    __new__(cls, *args, **kwargs):
        真正的构造方法, 创建对象时可以开辟空间, 所有对象的创建都是通过__new__实现
        object基类默认有_new__

 __getattr__

   如果属性查找(attribute lookup)在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数, 如果没有定义这个函数,那么抛出AttributeError异常
五. 创建对象的步骤
    1. 加载类
    (给类创建一个名称空间, 存放类变量, 此时不创建类对象, 也能使用类变量)
    2. 创建对象: 开辟内存(__new__), 初始化(__init__)
    (先找类, 根据类名来开辟内存执行类中的__new__和__init__, 返回对象)
    3. 操作对象

原文地址:https://www.cnblogs.com/guyannanfei/p/10146596.html