zoukankan      html  css  js  c++  java
  • 面向对象串讲

    面向对象串讲

    类与对象
    	__init__
        
    class Person:
        school='xxx'
        def __init__(self):  #对象初始化方法,对象的绑定方法,对象来调用会把对象传过来
            self.name='xxx'
    
    p=Person()   #类实例化产生对象会调用__init__
    
    print(p.school)
    Person.school='uuuu'
    p.school='yy'
    

    属性查找

    包括数据属性,包括方法

    ​ 数据属性:对象中找--->类中--->父类(按照mro查找)--->obj py2中没有mro这东西

    ​ 方法查找:对象的绑定方法--->父类中按照mro列表查找--->obj

    绑定方法

    定义在类内部,没有被任何装饰器装饰的函数,就是方法

    给对象来用 对象.方法()默认把对象自身传过去 * * * *特殊之处

    类来调用就是普通函数,有几个值就传几个值

    对象之间的交互

    把一个对象传到另一个对象中,操作这个对象

    例子:人狗大战

    三大特性(继承/封装/多态)

    继承:

    在类名后的括号中要写继承的类,用逗号分隔

    py中支持多继承(属性查找顺序)

    新式类和经典类:

    继承了object的类都叫新式类(py3中都是新式类)

    py2中才有新式类,经典类之说

    菱形问题的查找:

    广度优先:新式类

    深度优先:经典类

    mro列表

    super() 特殊对象,调用父类的方法和属性(严格按照mro列表找的)

    self和super的区别:self一定是从根上找,super()从当前位置按照mro列表查找

    类名.方法() 就是个普通函数,这个就不按照mro列表找了,指名道姓地来用

    派生: 子类多出来的属性,方法

    多态和多态性

    多态是指一个事物的多种形态

    多态性是指执行同一个事物的同一个方法,表现出来的结果是不一样的

    两种实现限制子类的方法 一个abc模块/raise抛异常

    鸭子类型

    走路像鸭子,叫声像鸭子,你就是鸭子

    len()函数返回对象实例的“长度”

    调用对象.__len__()

    封装

    把属性和方法隐藏

    __开头,就会隐藏

    并没有实际隐藏,其实是做了变形

    隐藏属性:保证数据安全

    隐藏方法:隔离复杂度

    property装饰器 包装成数据属性

    其他两个装饰器:

    classmethod:类的绑定方法:可以类来调用会自动把类传入(对象也可以调用)

    staticmethod: 静态方法,谁都可以调用,不会自动传参数

    元类

     	-__call__
        -__new__
        -__getattr__
        -__setattr__
        -__delattr__
        _type和object
    

    反射(通过字符串去获取,删除,修改,对象的属性或方法)

    -hasattr
    -getattr
    -setattr
    -delattr
    isinstance和issubclass
    
  • 相关阅读:
    Vue 环境配置
    导入解决方案错误及其解决办法
    Dynamics 365创建用户提示:您正在尝试使用已由其他用户使用的域登录来创建用户。的解决办法
    iOS核心动画详解(CABasicAnimation)
    iOS核心动画详解(一)
    iOS 微信支付流程详解
    初探runtime
    iOS之block,一点小心得
    iOS scrollview循环播放加缩放
    用程序删除工程中多余的图片
  • 原文地址:https://www.cnblogs.com/aden668/p/11497818.html
Copyright © 2011-2022 走看看