python面对对象(个人复习总结)

三大特性是:封装,继承,多态

五大基本原则

1.单一职责原则SRP(Single Responsibility Principle)

2.开放封闭原则OCP(Open-Close Principle)

3.替换原则(the Liskov Substitution Principle LSP)

4.依赖原则(the Dependency Inversion Principle DIP) 

5.接口分离原则(the Interface Segregation Principle ISP)

一。封装

加双下划线变成私有。都不能在类的外部使用。对象的私有属性方法静态私有属性

@property 被修饰的方法不能传任何参数 将方法伪装成属性。
@方法名.mideleter 与类外的 del 关联
@ setter
例:@property
    def name(self):
        return self.__name
    @name.deleter
    def name(self):
        del self.__name

二。继承

# 组合  一个对象的属性值是另一个类的对对象
# 继承  可以继承一个或多个父类(别名:基类或超类)
    一个类可以被多个类继承,子类可以找到父类,父类找不到子类
    派生:在原有属性上增加新的属性。
    使用super()调用父类的方法,也可以父类实例化调用父类方法
    super(类,实例)类外也可用。
    正常使用单继承
    # 多继承 从第一个找,没有找第二个
        广度优先 .mor() 可以查看继承顺序
        2.7 经典类是深度优先,新式类(要继承object)是广度优先 
        super() mor() 只在新式类里有。
        super()不是直接调用父类,而是调用节点的顺序
# 接口类 有关设计模式 python 原生不支持 接口类支持多继承,方法不能实现 
    接口隔离原则,使用多个接口,而不是使用单一的总接口
     例: from abc import abstractmethod, ABCMeta
          class Payment(metaclass = ABCMeta):
             @abstractmethod
             def pay(self, money) 
                 pass
# 抽象类 python 原生支持 若没有实现抽象类的方法就会报错 不支持多继承,可以实现方法 
# 能实现的功能都是一样的, 都是面向对象的开发规范。接口类 
    import abc
    class ALL_file(metaclass=abc.ABCMeta)   
        @abc.abstractmethod
# python 崇尚鸭子类型 list 和 tuple 很相似 却没有用父类约束
优点:松耦合,每个相似的类没有影响
缺点: 太随意
# 类方法 @classmethod
    类的操作行为
    例:@classmethod
        def change_method(cls):
            pass 
# 静态方法 @staticmethod  在完全面对对象的过程中,一个函数与
类和对象完全没有关系时使用    

三。多态

    多态顾名思义 即一个接口的多种实现方式,子类实力指向父类对象的用法称为多态中的向上转型,多用于方法参数,类中的实例属性,以及函数返回值中,向上转型时父类对象只能调用本类所拥有的实例,如果父类中有和子类定义相同名称的方法,则优先调用子类实例中的方法

四。进阶:反射

在python中的反射是指:可以通过字符串去操作对象的相关属性(类本身也是对象)

通过四个函数实现内省:hasattr(),getattr(),delattr(),setattr()

getatter 通过字符串范文变量 
例:getatter(类名,‘变量名’)
    getatter(类名, '函数名')返回函数地址
    hasattr() 于getatter相似,返回布尔值



类内置方法:
  __str__  一但被调用就返回调用这个方法的内存地址,可自定义但只能返回str类型
            %s,str()打印对象时自动调用__str__
  __repr__ repr是str的备胎, 如果没有str会优先查找repr,再找父类,优先实现
  __len__ 可以定制对象的长度。
  __del__ 析构函数 执行顺序,先执行,后删除 内部有引用计数当为0时删除或超过700删除
            在删除对象前做一些收尾工作
  __call__  一个对象加括号,相当于执行__call__方法
  
item系列 __getitem__ 是对象支持字典方式获得 a['name']
            __setitem__ 设置
            __delitem__ 删除 del a['name']
 __new__   构造方法。 先执行new造出新对象,在给__init__


    单例模式:class A:
                  __instance = False
                  def __init__(self,name)
                        self.name = name
                  def __new__(cls, *args, **kwargs)
                        if cls.__istance:
                            return cls.__instance
                        cls.__instance = object.__new__(A)
                        return cls.__instance
  # set 依赖于__eq__ __hash__
  __eq__   不实现时默认比较内存地址,可以自己判断比较条件
  __hash__ 实现了就变为可哈希的

 

# 以后学的多了再回来进行补充

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值